Merge FreeBSD locking fixes (bug #1411)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3176 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.0
Mark Spencer 22 years ago
parent c96046b6c2
commit 727abcdec7

@ -34,7 +34,7 @@
#include <fcntl.h>
#include <net/route.h>
static ast_mutex_t routeseq_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(routeseq_lock);
#endif

@ -59,7 +59,7 @@ STANDARD_LOCAL_USER;
LOCAL_USER_DECL;
static ast_mutex_t sound_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(sound_lock);
static int sound = -1;
static int write_audio(short *data, int len)

@ -125,7 +125,7 @@ struct ast_conf_user {
#define ADMINFLAG_KICKME (1 << 2) /* User is kicked */
static ast_mutex_t conflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(conflock);
static int admin_exec(struct ast_channel *chan, void *data);

@ -218,7 +218,7 @@ struct ast_call_queue {
};
static struct ast_call_queue *queues = NULL;
static ast_mutex_t qlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(qlock);
static char *int2strat(int strategy)
{

@ -207,7 +207,7 @@ static char *app2 = "VoiceMailMain";
static char *app3 = "MailboxExists";
static ast_mutex_t vmlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(vmlock);
struct ast_vm_user *users;
struct ast_vm_user *usersl;
struct vm_zone *zones = NULL;

@ -83,7 +83,7 @@ static struct ast_atexit {
void (*func)(void);
struct ast_atexit *next;
} *atexits = NULL;
static ast_mutex_t atexitslock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(atexitslock);
time_t ast_startuptime;
time_t ast_lastreloadtime;

@ -58,8 +58,8 @@ static struct ast_region {
#define HASH(a) \
(((unsigned long)(a)) % SOME_PRIME)
static ast_mutex_t reglock = AST_MUTEX_INITIALIZER;
static ast_mutex_t showmemorylock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(reglock);
AST_MUTEX_DEFINE_STATIC(showmemorylock);
static inline void *__ast_alloc_region(size_t size, int which, const char *file, int lineno, const char *func)
{

@ -36,7 +36,7 @@
#define MAX_AUTOMONS 256
static ast_mutex_t autolock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(autolock);
struct asent {
struct ast_channel *chan;

@ -30,7 +30,7 @@
int ast_default_amaflags = AST_CDR_DOCUMENTATION;
char ast_default_accountcode[20] = "";
static ast_mutex_t cdrlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(cdrlock);
static struct ast_cdr_beitem {
char name[20];

@ -41,7 +41,7 @@ static char *dsn = NULL, *username = NULL, *password = NULL, *loguniqueid = NULL
static int dsn_alloc = 0, username_alloc = 0, password_alloc = 0, loguniqueid_alloc = 0;
static int connected = 0;
static ast_mutex_t odbc_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(odbc_lock);
static int odbc_do_query(void);
static int odbc_init(void);

@ -41,7 +41,7 @@ static char *pghostname = NULL, *pgdbname = NULL, *pgdbuser = NULL, *pgpassword
static int hostname_alloc = 0, dbname_alloc = 0, dbuser_alloc = 0, password_alloc = 0, dbsock_alloc = 0, dbport_alloc = 0;
static int connected = 0;
static ast_mutex_t pgsql_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(pgsql_lock);
PGconn *conn;
PGresult *result;

@ -74,7 +74,7 @@ struct ast_channel *channels = NULL;
/* Protect the channel list (highly unlikely that two things would change
it at the same time, but still! */
static ast_mutex_t chlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(chlock);
int ast_check_hangup(struct ast_channel *chan)
{

@ -91,10 +91,10 @@ static int wrapuptime;
static int ackcall;
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of sip_pvt's) */
static ast_mutex_t agentlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(agentlock);
static int recordagentcalls = 0;
static char recordformat[AST_MAX_BUF];

@ -77,7 +77,7 @@ static int silencethreshold = 1000;
static char digits[80] = "";
static char text2send[80] = "";
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
static char *type = "Console";
static char *desc = "ALSA Console Channel Driver";

@ -141,15 +141,15 @@ static struct sched_context *sched;
static struct io_context *io;
/** Protect the interface list (of oh323_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
/** Usage counter and associated lock */
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */

@ -80,7 +80,7 @@
#define GAMMA (0.01)
#ifdef MYSQL_FRIENDS
static ast_mutex_t mysqllock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(mysqllock);
static MYSQL *mysql;
static char mydbuser[80];
static char mydbpass[80];
@ -112,7 +112,7 @@ static int tos = 0;
static int expirey = AST_DEFAULT_REG_EXPIRE;
static int usecnt;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
int (*iax_regfunk)(char *username, int onoff) = NULL;

@ -100,7 +100,7 @@
#define GAMMA (0.01)
#ifdef MYSQL_FRIENDS
static ast_mutex_t mysqllock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(mysqllock);
static MYSQL *mysql;
static char mydbuser[80];
static char mydbpass[80];
@ -138,7 +138,7 @@ static int expirey = IAX_DEFAULT_REG_EXPIRE;
static int timingfd = -1; /* Timing file descriptor */
static int usecnt;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
int (*iax2_regfunk)(char *username, int onoff) = NULL;
@ -269,7 +269,7 @@ static struct iax2_trunk_peer {
int calls;
} *tpeers = NULL;
static ast_mutex_t tpeerlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(tpeerlock);
struct iax_firmware {
struct iax_firmware *next;

@ -49,12 +49,12 @@ static char *tdesc = "Local Proxy Channel Driver";
static int capability = -1;
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
#define IS_OUTBOUND(a,b) (a == b->chan ? 1 : 0)
/* Protect the interface list (of sip_pvt's) */
static ast_mutex_t locallock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(locallock);
static struct local_pvt {
ast_mutex_t lock; /* Channel private lock */

@ -199,7 +199,7 @@ static int adsi = 0;
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* SC: transaction id should always be positive */
static unsigned int oseq;
@ -214,9 +214,9 @@ static int matchdigittimeout = 3000;
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t netlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(netlock);
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */
@ -419,10 +419,10 @@ static struct mgcp_gateway {
struct mgcp_gateway *next;
} *gateways;
static ast_mutex_t mgcp_reload_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(mgcp_reload_lock);
static int mgcp_reloading = 0;
static ast_mutex_t gatelock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(gatelock);
static int mgcpsock = -1;

@ -72,14 +72,14 @@ static int baudrate = 115200;
static int stripmsd = 0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of ast_modem_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */

@ -34,7 +34,7 @@ static char *breakcmd = "\0x10\0x03";
static char *desc = "A/Open (Rockwell Chipset) ITU-2 VoiceModem Driver";
static int usecnt;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
static char *aopen_idents[] = {
/* Identify A/Open Modem */

@ -39,7 +39,7 @@ static char *breakcmd = "\020!";
static char *desc = "BestData (Conexant V.90 Chipset) VoiceModem Driver";
static int usecnt;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
static char *bestdata_idents[] = {
/* Identify BestData Modem */

@ -34,7 +34,7 @@ static char *breakcmd = "\0x10\0x14\0x10\0x3";
static char *desc = "ISDN4Linux Emulated Modem Driver";
static int usecnt;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
static char *i4l_idents[] = {
/* Identify ISDN4Linux Driver */

@ -41,7 +41,7 @@ static int usecnt =0;
/* Only linear is allowed */
static int prefformat = AST_FORMAT_SLINEAR;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
static char context[AST_MAX_EXTENSION] = "default";

@ -70,7 +70,7 @@ static int silencesuppression = 0;
static int silencethreshold = 1000;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
static char *type = "Console";
static char *desc = "OSS Console Channel Driver";

@ -76,14 +76,14 @@ static int silencesupression = 0;
static int prefformat = AST_FORMAT_G723_1 | AST_FORMAT_SLINEAR | AST_FORMAT_ULAW;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of phone_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */

@ -108,7 +108,7 @@ static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
/* MYSQL_FRIENDS: Check if peer exists in database and read some configuration
from databse (not all options supported though) */
#ifdef MYSQL_FRIENDS
static ast_mutex_t mysqllock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(mysqllock);
static MYSQL *mysql;
static char mydbuser[80];
static char mydbpass[80];
@ -155,16 +155,16 @@ static int globalrtptimeout = 0;
static int globalrtpholdtimeout = 0;
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of sip_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t netlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(netlock);
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */
@ -430,7 +430,7 @@ struct sip_peer {
struct sip_peer *next;
};
static ast_mutex_t sip_reload_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
static int sip_reloading = 0;
#define REG_STATE_UNREGISTERED 0
@ -467,20 +467,20 @@ struct sip_registry {
static struct ast_user_list {
struct sip_user *users;
ast_mutex_t lock;
} userl = { NULL, AST_MUTEX_INITIALIZER };
} userl;
/*--- The peer list: Peers and Friends ---*/
static struct ast_peer_list {
struct sip_peer *peers;
ast_mutex_t lock;
} peerl = { NULL, AST_MUTEX_INITIALIZER };
} peerl;
/*--- The register list: Other SIP proxys we register with and call ---*/
static struct ast_register_list {
struct sip_registry *registrations;
ast_mutex_t lock;
int recheck;
} regl = { NULL, AST_MUTEX_INITIALIZER };
} regl;
#define REINVITE_INVITE 1
@ -1368,6 +1368,7 @@ static void __sip_destroy(struct sip_pvt *p, int lockowner)
ast_sched_del(sched, cp->retransid);
free(cp);
}
ast_mutex_destroy(&p->lock);
free(p);
}
}
@ -2018,6 +2019,7 @@ static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useg
struct sip_pvt *p;
p = malloc(sizeof(struct sip_pvt));
ast_mutex_init(&p->lock);
if (!p)
return NULL;
/* Keep track of stuff */
@ -2035,6 +2037,7 @@ static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useg
p->ocseq = 101;
if (!p->rtp) {
ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
ast_mutex_destroy(&p->lock);
free(p);
return NULL;
}
@ -2049,7 +2052,6 @@ static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useg
if (p->vrtp)
ast_rtp_setnat(p->vrtp, p->nat);
}
ast_mutex_init(&p->lock);
if (sin) {
memcpy(&p->sa, sin, sizeof(p->sa));
@ -8039,6 +8041,10 @@ int load_module()
int res;
struct sip_peer *peer;
struct sip_registry *reg;
ast_mutex_init(&userl.lock);
ast_mutex_init(&peerl.lock);
ast_mutex_init(&regl.lock);
sched = sched_context_create();
if (!sched) {
ast_log(LOG_WARNING, "Unable to create schedule context\n");

@ -585,17 +585,17 @@ static struct io_context *io;
/* usage count and locking */
static int usecnt = 0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* Protect the network socket */
static ast_mutex_t netlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(netlock);
/* Protect the session list */
static ast_mutex_t sessionlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(sessionlock);
/* Protect the device list */
static ast_mutex_t devicelock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(devicelock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */

@ -53,14 +53,14 @@ static char context[AST_MAX_EXTENSION] = "default";
static char language[MAX_LANGUAGE] = "";
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of vofr_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */

@ -69,14 +69,14 @@ static int gruntdetect_timeout = 3600000; /* Grunt detect timeout is 1hr. */
static const int prefformat = AST_FORMAT_SLINEAR;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of vpb_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */
@ -171,7 +171,7 @@ typedef struct {
static vpb_bridge_t * bridges;
static int max_bridges = MAX_BRIDGES_V4PCI;
static ast_mutex_t bridge_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(bridge_lock);
typedef enum {
vpb_model_unknown = 0,

@ -241,16 +241,16 @@ static int gendigittimeout = 8000;
static int matchdigittimeout = 3000;
static int usecnt =0;
static ast_mutex_t usecnt_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(usecnt_lock);
/* Protect the interface list (of zt_pvt's) */
static ast_mutex_t iflock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(iflock);
static int ifcount = 0;
/* Protect the monitoring thread, so only one process can kill or start it, and not
when it's doing something critical. */
static ast_mutex_t monlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monlock);
/* This is the thread for the monitor which checks for input on the channels
which are not currently in use. */

@ -46,8 +46,7 @@ void ast_cli(int fd, char *fmt, ...)
free(stuff);
}
ast_mutex_t clilock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(clilock);
struct ast_cli_entry *helpers = NULL;
@ -157,7 +156,7 @@ static int handle_unload(int fd, int argc, char *argv[])
#define MODLIST_FORMAT "%-25s %-40.40s %-10d\n"
#define MODLIST_FORMAT2 "%-25s %-40.40s %-10s\n"
static ast_mutex_t climodentrylock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(climodentrylock);
static int climodentryfd = -1;
static int modlist_modentry(char *module, char *description, int usecnt)

@ -27,7 +27,7 @@
#define BUFFER_SIZE 8096 /* size for the translation buffers */
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt = 0;
static char *tdesc = "A-law and Mulaw direct Coder/Decoder";

@ -28,7 +28,7 @@
#define BUFFER_SIZE 8096 /* size for the translation buffers */
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt = 0;
static char *tdesc = "Adaptive Differential PCM Coder/Decoder";

@ -26,7 +26,7 @@
#define BUFFER_SIZE 8096 /* size for the translation buffers */
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt = 0;
static char *tdesc = "A-law Coder/Decoder";

@ -56,7 +56,7 @@
#include "slin_g723_ex.h"
#include "g723_slin_ex.h"
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt=0;
#ifdef ANNEX_B

@ -29,7 +29,7 @@
#define BUFFER_SIZE 8096 /* size for the translation buffers */
#define BUF_SHIFT 5
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt = 0;
static char *tdesc = "ITU G.726-32kbps G726 Transcoder";

@ -39,7 +39,7 @@
#include "slin_gsm_ex.h"
#include "gsm_slin_ex.h"
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt=0;
static char *tdesc = "GSM/PCM16 (signed linear) Codec Translator";

@ -35,7 +35,7 @@
#define USE_ILBC_ENHANCER 0
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt=0;
static char *tdesc = "iLBC/PCM16 (signed linear) Codec Translator";

@ -43,7 +43,7 @@
#define LPC10_BYTES_IN_COMPRESSED_FRAME (LPC10_BITS_IN_COMPRESSED_FRAME + 7)/8
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt=0;
static char *tdesc = "LPC10 2.4kbps (signed linear) Voice Coder";

@ -37,7 +37,7 @@
#include "slin_speex_ex.h"
#include "speex_slin_ex.h"
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt=0;
static char *tdesc = "Speex/PCM16 (signed linear) Codec Translator";

@ -26,7 +26,7 @@
#define BUFFER_SIZE 8096 /* size for the translation buffers */
static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(localuser_lock);
static int localusecnt = 0;
static char *tdesc = "Mu-law Coder/Decoder";

@ -38,7 +38,7 @@
#include "astconf.h"
static DB *astdb;
static ast_mutex_t dblock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(dblock);
static int dbinit(void)
{

@ -154,7 +154,7 @@ static int dns_parse_answer(void *context,
#if defined(res_ninit)
#define HAS_RES_NINIT
#else
static ast_mutex_t res_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(res_lock);
#if 0
#warning "Warning, res_ninit is missing... Could have reentrancy issues"
#endif

@ -53,7 +53,7 @@ static struct enum_search {
static int enumver = 0;
static ast_mutex_t enumlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(enumlock);
struct naptr {
unsigned short order;

@ -79,7 +79,7 @@ struct ast_filestream {
struct ast_channel *owner;
};
static ast_mutex_t formatlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(formatlock);
static struct ast_format *formats = NULL;

@ -42,7 +42,7 @@ struct ast_filestream {
};
static ast_mutex_t g723_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(g723_lock);
static int glistcnt = 0;
static char *name = "g723sf";

@ -59,7 +59,7 @@ struct ast_filestream {
unsigned char g726[FRAME_TIME * 5]; /* G.726 encoded voice */
};
static ast_mutex_t g726_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(g726_lock);
static int glistcnt = 0;
static char *desc = "Raw G.726 (16/24/32/40kbps) data";

@ -49,7 +49,7 @@ struct ast_filestream {
};
static ast_mutex_t g729_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(g729_lock);
static int glistcnt = 0;
static char *name = "g729";

@ -58,7 +58,7 @@ struct ast_filestream {
};
static ast_mutex_t gsm_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(gsm_lock);
static int glistcnt = 0;
static char *name = "gsm";

@ -50,7 +50,7 @@ struct ast_filestream {
};
static ast_mutex_t h263_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(h263_lock);
static int glistcnt = 0;
static char *name = "h263";

@ -51,7 +51,7 @@ struct ast_filestream {
};
static ast_mutex_t ilbc_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(ilbc_lock);
static int glistcnt = 0;
static char *name = "iLBC";

@ -47,7 +47,7 @@ struct ast_filestream {
};
static ast_mutex_t pcm_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(pcm_lock);
static int glistcnt = 0;
static char *name = "pcm";

@ -54,7 +54,7 @@ struct ast_filestream {
};
static ast_mutex_t pcm_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(pcm_lock);
static int glistcnt = 0;
static char *name = "alaw";

@ -51,7 +51,7 @@ struct ast_filestream {
};
static ast_mutex_t vox_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(vox_lock);
static int glistcnt = 0;
static char *name = "vox";

@ -53,7 +53,7 @@ struct ast_filestream {
};
static ast_mutex_t wav_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(wav_lock);
static int glistcnt = 0;
static char *name = "wav";

@ -63,7 +63,7 @@ struct ast_filestream {
};
static ast_mutex_t wav_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(wav_lock);
static int glistcnt = 0;
static char *name = "wav49";

@ -29,7 +29,7 @@
#ifdef TRACE_FRAMES
static int headers = 0;
static struct ast_frame *headerlist = NULL;
static ast_mutex_t framelock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(framelock);
#endif
#define SMOOTHER_SIZE 8000

@ -33,7 +33,7 @@
#include "astconf.h"
static struct ast_imager *list;
static ast_mutex_t listlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(listlock);
int ast_image_register(struct ast_imager *img)
{

@ -16,9 +16,6 @@ struct name { \
ast_mutex_t lock; \
}
#define AST_LIST_HEAD_INITIALIZER(head) \
{ NULL, AST_MUTEX_INITIALIZER }
#define AST_LIST_HEAD_SET(head,entry) do { \
(head)->first=(entry); \
ast_pthread_mutex_init(&(head)->lock,NULL); \

@ -28,6 +28,14 @@
0x20 } }
#endif
#ifdef __FreeBSD__
#ifdef __GNUC__
#define AST_MUTEX_INIT_W_CONSTRUCTORS
#else
#define AST_MUTEX_INIT_ON_FIRST_USE
#endif
#endif /* __FreeBSD__ */
#ifdef DEBUG_THREADS
#ifdef THREAD_CRASH
@ -41,9 +49,17 @@
/* From now on, Asterisk REQUIRES Recursive (not error checking) mutexes
and will not run without them. */
#ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
#define AST_MUTEX_INIT_VAULE { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, NULL, 0, NULL, 0 }
#else
#define AST_MUTEX_INIT_VAULE { PTHREAD_MUTEX_INITIALIZER, NULL, 0, NULL, 0 }
#endif
#define AST_MUTEX_INITIALIZER { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, NULL, 0, NULL, 0 }
#ifdef PTHREAD_MUTEX_RECURSIVE_NP
#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE_NP
#else
#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE
#endif
struct ast_mutex_info {
pthread_mutex_t mutex;
@ -55,38 +71,53 @@ struct ast_mutex_info {
typedef struct ast_mutex_info ast_mutex_t;
static inline int ast_mutex_init(ast_mutex_t *t) {
static pthread_mutexattr_t attr;
static int init = 1;
int res;
extern int pthread_mutexattr_setkind_np(pthread_mutexattr_t *, int);
if (init) {
pthread_mutexattr_init(&attr);
pthread_mutexattr_setkind_np(&attr, AST_MUTEX_KIND);
init = 0;
}
res = pthread_mutex_init(&t->mutex, &attr);
static inline int ast_pthread_mutex_init(ast_mutex_t *t, pthread_mutexattr_t *attr)
{
t->file = NULL;
t->lineno = 0;
t->func = 0;
t->thread = 0;
return res;
return pthread_mutex_init(&t->mutex, attr);
}
static inline int ast_pthread_mutex_init(ast_mutex_t *t, pthread_mutexattr_t *attr)
static inline int ast_mutex_init(ast_mutex_t *t)
{
int res;
res = pthread_mutex_init(&t->mutex, attr);
t->file = NULL;
t->lineno = 0;
t->func = 0;
t->thread = 0;
return res;
static pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, AST_MUTEX_KIND);
return ast_pthread_mutex_init(t, &attr);
}
static inline int __ast_pthread_mutex_lock(char *filename, int lineno, char *func, ast_mutex_t *t) {
#if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
/* if AST_MUTEX_INIT_W_CONSTRUCTORS is defined, use file scope
constrictors/destructors to create/destroy mutexes. */
#define __AST_MUTEX_DEFINE(scope,mutex) \
scope ast_mutex_t mutex = AST_MUTEX_INIT_VAULE; \
static void __attribute__ ((constructor)) init_##mutex(void) \
{ \
ast_mutex_init(&mutex); \
} \
static void __attribute__ ((destructor)) fini_##mutex(void) \
{ \
ast_mutex_destroy(&mutex); \
}
#elif defined(AST_MUTEX_INIT_ON_FIRST_USE) || !defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
/* if AST_MUTEX_INIT_ON_FIRST_USE is defined, mutexes are created on
first use. The performance impact on FreeBSD should be small since
the pthreads library does this itself to initialize errror checking
(defaulty type) mutexes. If nither is defined, the pthreads librariy
does the initialization itself on first use. */
#define __AST_MUTEX_DEFINE(scope,mutex) \
scope ast_mutex_t mutex = AST_MUTEX_INIT_VAULE
#endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
static inline int __ast_pthread_mutex_lock(char *filename, int lineno, char *func, ast_mutex_t *t)
{
int res;
#ifdef AST_MUTEX_INIT_ON_FIRST_USE
if(*t->mutex == (ast_mutex_t)AST_MUTEX_KIND)
ast_mutex_init(t->mutex);
#endif
res = pthread_mutex_lock(&t->mutex);
if (!res) {
t->file = filename;
@ -107,6 +138,10 @@ static inline int __ast_pthread_mutex_lock(char *filename, int lineno, char *fun
static inline int __ast_pthread_mutex_trylock(char *filename, int lineno, char *func, ast_mutex_t *t) {
int res;
#ifdef AST_MUTEX_INIT_ON_FIRST_USE
if(*t->mutex == (ast_mutex_t)AST_MUTEX_KIND)
ast_mutex_init(t->mutex);
#endif
res = pthread_mutex_trylock(&t->mutex);
if (!res) {
t->file = filename;
@ -166,26 +201,83 @@ static inline int __ast_pthread_mutex_destroy(char *filename, int lineno, char *
/* From now on, Asterisk REQUIRES Recursive (not error checking) mutexes
and will not run without them. */
#define AST_MUTEX_INITIALIZER PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
#ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
#define AST_MUTEX_INIT_VAULE PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
#else
#define AST_MUTEX_INIT_VAULE PTHREAD_MUTEX_INITIALIZER
#endif
#ifdef PTHREAD_MUTEX_RECURSIVE_NP
#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE_NP
#else
#define AST_MUTEX_KIND PTHREAD_MUTEX_RECURSIVE
#endif
typedef pthread_mutex_t ast_mutex_t;
#define ast_mutex_lock(t) pthread_mutex_lock(t)
#define ast_mutex_unlock(t) pthread_mutex_unlock(t)
#define ast_mutex_trylock(t) pthread_mutex_trylock(t)
static inline int ast_mutex_init(ast_mutex_t *t)
static inline int ast_mutex_init(ast_mutex_t *pmutex)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, AST_MUTEX_KIND);
return pthread_mutex_init(t, &attr);
return pthread_mutex_init(pmutex, &attr);
}
#define ast_pthread_mutex_init(pmutex,a) pthread_mutex_init(pmutex,a)
#define ast_mutex_unlock(pmutex) pthread_mutex_unlock(pmutex)
#define ast_mutex_destroy(pmutex) pthread_mutex_destroy(pmutex)
#if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
/* if AST_MUTEX_INIT_W_CONSTRUCTORS is defined, use file scope
constrictors/destructors to create/destroy mutexes. */
#define __AST_MUTEX_DEFINE(scope,mutex) \
scope ast_mutex_t mutex = AST_MUTEX_INIT_VAULE; \
static void __attribute__ ((constructor)) init_##mutex(void) \
{ \
ast_mutex_init(&mutex); \
} \
static void __attribute__ ((destructor)) fini_##mutex(void) \
{ \
ast_mutex_destroy(&mutex); \
}
#define ast_mutex_lock(pmutex) pthread_mutex_lock(pmutex)
#define ast_mutex_trylock(pmutex) pthread_mutex_trylock(pmutex)
#elif defined(AST_MUTEX_INIT_ON_FIRST_USE)
/* if AST_MUTEX_INIT_ON_FIRST_USE is defined, mutexes are created on
first use. The performance impact on FreeBSD should be small since
the pthreads library does this itself to initialize errror checking
(defaulty type) mutexes.*/
#define __AST_MUTEX_DEFINE(scope,mutex) \
scope ast_mutex_t mutex = AST_MUTEX_INIT_VAULE
static inline int ast_mutex_lock(ast_mutex_t *pmutex)
{
if(*pmutex == (ast_mutex_t)AST_MUTEX_KIND)
ast_mutex_init(pmutex);
return pthread_mutex_lock(pmutex);
}
static inline int ast_mutex_trylock(ast_mutex_t *pmutex)
{
if(*pmutex == (ast_mutex_t)AST_MUTEX_KIND)
ast_mutex_init(pmutex);
return pthread_mutex_trylock(pmutex);
}
#define ast_pthread_mutex_init(t,a) pthread_mutex_init(t,a)
#define ast_mutex_destroy(t) pthread_mutex_destroy(t)
#else
/* By default, use static initialization of mutexes.*/
#define __AST_MUTEX_DEFINE(scope,mutex) \
scope ast_mutex_t mutex = AST_MUTEX_INIT_VAULE
#define ast_mutex_lock(pmutex) pthread_mutex_lock(pmutex)
#define ast_mutex_trylock(pmutex) pthread_mutex_trylock(pmutex)
#endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
#endif /* DEBUG_THREADS */
#define AST_MUTEX_DEFINE_STATIC(mutex) __AST_MUTEX_DEFINE(static,mutex)
#define AST_MUTEX_DEFINE_EXPORTED(mutex) __AST_MUTEX_DEFINE(/**/,mutex)
#define AST_MUTEX_INITIALIZER __use_AST_MUTEX_DEFINE_STATIC_rather_than_AST_MUTEX_INITIALIZER__
#define gethostbyname __gethostbyname__is__not__reentrant__use__ast_gethostbyname__instead__
#endif

@ -152,7 +152,7 @@ void ast_unregister_atexit(void (*func)(void));
struct localuser *next; \
}
#define LOCAL_USER_DECL static ast_mutex_t localuser_lock = AST_MUTEX_INITIALIZER; \
#define LOCAL_USER_DECL AST_MUTEX_DEFINE_STATIC(localuser_lock); \
static struct localuser *localusers = NULL; \
static int localusecnt = 0;

@ -229,7 +229,7 @@ static struct tone_zone *current_tonezone;
/* Protect the tone_zones list (highly unlikely that two things would change
* it at the same time, but still! */
ast_mutex_t tzlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_EXPORTED(tzlock);
/* Set global indication country */
int ast_set_indication_country(const char *country)

@ -98,8 +98,8 @@ static struct loadupdate {
struct loadupdate *next;
} *updaters = NULL;
static ast_mutex_t modlock = AST_MUTEX_INITIALIZER;
static ast_mutex_t reloadlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(modlock);
AST_MUTEX_DEFINE_STATIC(reloadlock);
static struct module *module_list=NULL;

@ -49,8 +49,8 @@ static int syslog_level_map[] = {
#define MAX_MSG_QUEUE 200
static char dateformat[256] = "%b %e %T"; /* Original Asterisk Format */
static ast_mutex_t msglist_lock = AST_MUTEX_INITIALIZER;
static ast_mutex_t loglock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(msglist_lock);
AST_MUTEX_DEFINE_STATIC(loglock);
static int pending_logger_reload = 0;
static struct msglist {
@ -228,7 +228,7 @@ static void init_logger_chain(void)
}
static FILE *qlog = NULL;
static ast_mutex_t qloglock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(qloglock);
void ast_queue_log(const char *queuename, const char *callid, const char *agent, const char *event, const char *fmt, ...)
{

@ -59,7 +59,7 @@ static int enabled = 0;
static int portno = DEFAULT_MANAGER_PORT;
static int asock = -1;
static pthread_t t;
static ast_mutex_t sessionlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(sessionlock);
static int block_sockets = 0;
static struct permalias {
@ -78,7 +78,7 @@ static struct permalias {
static struct mansession *sessions = NULL;
static struct manager_action *first_action = NULL;
static ast_mutex_t actionlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(actionlock);
int ast_carefulwrite(int fd, char *s, int len, int timeoutms)
{

11
pbx.c

@ -176,7 +176,7 @@ int pbx_builtin_setvar(struct ast_channel *, void *);
void pbx_builtin_setvar_helper(struct ast_channel *chan, char *name, char *value);
char *pbx_builtin_getvar_helper(struct ast_channel *chan, char *name);
static struct varshead globals = AST_LIST_HEAD_INITIALIZER(varshead);
static struct varshead globals;
static struct pbx_builtin {
char name[AST_MAX_APP];
@ -362,18 +362,18 @@ static struct pbx_builtin {
};
/* Lock for the application list */
static ast_mutex_t applock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(applock);
static struct ast_context *contexts = NULL;
/* Lock for the ast_context list */
static ast_mutex_t conlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(conlock);
static struct ast_app *apps = NULL;
/* Lock for switches */
static ast_mutex_t switchlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(switchlock);
struct ast_switch *switches = NULL;
/* Lock for extension state notifys */
static ast_mutex_t hintlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(hintlock);
static int stateid = 1;
struct ast_hint *hints = NULL;
struct ast_state_cb *statecbs = NULL;
@ -4654,6 +4654,7 @@ int load_pbx(void)
ast_verbose( "Asterisk PBX Core Initializing\n");
ast_verbose( "Registering builtin applications:\n");
}
AST_LIST_HEAD_INIT(&globals);
ast_cli_register(&show_applications_cli);
ast_cli_register(&show_application_cli);
ast_cli_register(&show_dialplan_cli);

@ -42,7 +42,7 @@ static char *registrar = "pbx_config";
static int static_config = 0;
static int write_protect_config = 1;
static ast_mutex_t save_dialplan_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(save_dialplan_lock);
static struct ast_context *local_contexts = NULL;

@ -41,7 +41,7 @@
#include "../asterisk.h"
#include "../astconf.h"
static ast_mutex_t verb_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(verb_lock);
static pthread_t console_thread;

@ -59,7 +59,7 @@
static char base64[64];
static char b2a[256];
static ast_mutex_t keylock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(keylock);
#define KEY_NEEDS_PASSCODE (1 << 16)

@ -23,7 +23,7 @@
#define AST_MONITOR_DIR AST_SPOOL_DIR "/monitor"
static ast_mutex_t monitorlock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(monitorlock);
static unsigned long seq = 0;

@ -99,7 +99,7 @@ struct mohdata {
static struct mohclass *mohclasses;
static ast_mutex_t moh_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(moh_lock);
#define LOCAL_MPG_123 "/usr/local/bin/mpg123"
#define MPG_123 "/usr/bin/mpg123"

@ -84,7 +84,7 @@ struct parkeduser {
static struct parkeduser *parkinglot;
static ast_mutex_t parking_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(parking_lock);
static pthread_t parking_thread;

@ -184,10 +184,10 @@ static struct state * gmtptr = NULL;
static int gmt_is_set;
#ifdef _THREAD_SAFE
static ast_mutex_t lcl_mutex = AST_MUTEX_INITIALIZER;
static ast_mutex_t tzset_mutex = AST_MUTEX_INITIALIZER;
static ast_mutex_t tzsetwall_mutex = AST_MUTEX_INITIALIZER;
static ast_mutex_t gmt_mutex = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(lcl_mutex);
AST_MUTEX_DEFINE_STATIC(tzset_mutex);
AST_MUTEX_DEFINE_STATIC(tzsetwall_mutex);
AST_MUTEX_DEFINE_STATIC(gmt_mutex);
#endif
/*

@ -34,7 +34,7 @@
/* This could all be done more efficiently *IF* we chained packets together
by default, but it would also complicate virtually every application. */
static ast_mutex_t list_lock = AST_MUTEX_INITIALIZER;
AST_MUTEX_DEFINE_STATIC(list_lock);
static struct ast_translator *list = NULL;
struct ast_translator_dir {

@ -20,13 +20,14 @@
#define ERANGE 34
#undef gethostbyname
AST_MUTEX_DEFINE_STATIC(__mutex);
int gethostbyname_r (const char *name, struct hostent *ret, char *buf,
size_t buflen, struct hostent **result,
int *h_errnop)
{
int hsave;
struct hostent *ph;
static ast_mutex_t __mutex = AST_MUTEX_INITIALIZER;
ast_mutex_lock(&__mutex); /* begin critical area */
hsave = h_errno;

Loading…
Cancel
Save