/* Coverity Scan model
 *
 * This is a modelling file for Coverity Scan. Modelling helps to avoid false
 * positives.
 *
 * - A model file can't import any header files.
 * - Therefore only some built-in primitives like int, char and void are
 *   available but not NULL etc.
 * - Modelling doesn't need full structs and typedefs. Rudimentary structs
 *   and similar types are sufficient.
 * - An uninitialised local pointer is not an error. It signifies that the
 *   variable could be either NULL or have some data.
 *
 * Coverity Scan doesn't pick up modifications automatically. The model file
 * must be uploaded by an admin in the analysis.
 *
 * Based on:
 *     http://hg.python.org/cpython/file/tip/Misc/coverity_model.c
 * Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
 * 2011, 2012, 2013 Python Software Foundation; All Rights Reserved
 *
 */

/*
 * Useful references:
 *   https://scan.coverity.com/models
 */

typedef unsigned int switch_status_t;

struct pthread_mutex_t {};

struct switch_mutex
{
    struct pthread_mutex_t lock;
};
typedef struct switch_mutex switch_mutex_t;

switch_status_t switch_mutex_lock(switch_mutex_t *lock)
{
    __coverity_recursive_lock_acquire__(&lock->lock);
}

switch_status_t switch_mutex_unlock(switch_mutex_t *lock)
{
    __coverity_recursive_lock_release__(&lock->lock);
}