sqlite.h


Funciones de verificación de mutex

#ifndef NDEBUG
int sqlite3_mutex_held(sqlite3_mutex*);
int sqlite3_mutex_notheld(sqlite3_mutex*);
#endif

Las funciones sqlite3_mutex_held() y sqlite3_mutex_notheld() están diseñadas para usarse dentro de sentencias assert(). El núcleo de SQLite nunca usa estas funciones excepto dentro de un assert() y a las aplicaciones se les aconseja seguir el ejemplo del núcleo. El núclero de SQLite sólo proporciona implementaciones de estas funciones cuando es compilado con la bandera SQLITE_DEBUG. Las implementaciones externas de mutex sólo están obligadas a proporcionar estas funciones si SQLITE_DEBUG está definido y si NDEBUG no lo está.

Estas funciones deben retornar true si el mutex en su argumento se mantiene o no, respectivamente, por el hilo que las llama.

No es necesario que la implementación de las versiones de estas funciones realmente funcionen. Si la implementación no proporciona versiones de estas rutinas que funcionen, al menos deben proporcionar esbozos que siempre retornen true para que no se obtengas fallos de en los assert.

Si el argumento para sqlite3_mutex_held() es un puntero NULL la función retornará 1. Esto parece contraintuitivo pues resulta evidente que el mutex no puede mantenerse si no existe. Pero la razón de que el mutex no exista es que la construcción actual no use mutexes. Y no queremos que el assert() que contiene la llamada a sqlite3_mutex_held() falle, de modo que un valor de retorno no cero es lo adecuedo. La función sqlite3_mutex_notheld() también debe retornar 1 cuando se le proporciona un punero NULL.