Added some mutex locking

This commit is contained in:
Michiel Broek 2005-04-18 20:36:22 +00:00
parent 8576d89acc
commit 4eedaf9bd0

View File

@ -53,6 +53,8 @@ char crbuf[512]; /* Chat receive buffer */
char csbuf[512]; /* Chat send buffer */ char csbuf[512]; /* Chat send buffer */
pthread_mutex_t b_mutex = PTHREAD_MUTEX_INITIALIZER;
typedef enum {NCS_INIT, NCS_CALL, NCS_WAITPWD, NCS_CONNECT, NCS_HANGUP, NCS_FAIL, NCS_DEAD} NCSTYPE; typedef enum {NCS_INIT, NCS_CALL, NCS_WAITPWD, NCS_CONNECT, NCS_HANGUP, NCS_FAIL, NCS_DEAD} NCSTYPE;
@ -72,7 +74,7 @@ void tidy_servers(srv_list **);
void add_server(srv_list **, char *, int, char *, char *, char *, char *); void add_server(srv_list **, char *, int, char *, char *, char *, char *);
void del_server(srv_list **, char *); void del_server(srv_list **, char *);
void del_router(srv_list **, char *); void del_router(srv_list **, char *);
int send_msg(int, struct sockaddr_in, char *, char *); int send_msg(int, struct sockaddr_in, char *, char *);
void broadcast(char *, char *); void broadcast(char *, char *);
void check_servers(void); void check_servers(void);
void command_pass(char *, char *); void command_pass(char *, char *);
@ -87,7 +89,11 @@ void receiver(struct servent *);
*/ */
void fill_ncslist(ncs_list **fdp, char *server, char *myname, char *passwd) void fill_ncslist(ncs_list **fdp, char *server, char *myname, char *passwd)
{ {
ncs_list *tmp, *ta; ncs_list *tmp, *ta;
int rc;
if ((rc = pthread_mutex_lock(&b_mutex)))
Syslog('!', "fill_ncslist() mutex_lock failed rc=%d", rc);
tmp = (ncs_list *)malloc(sizeof(ncs_list)); tmp = (ncs_list *)malloc(sizeof(ncs_list));
memset(tmp, 0, sizeof(tmp)); memset(tmp, 0, sizeof(tmp));
@ -114,6 +120,9 @@ void fill_ncslist(ncs_list **fdp, char *server, char *myname, char *passwd)
break; break;
} }
} }
if ((rc = pthread_mutex_unlock(&b_mutex)))
Syslog('!', "fill_ncslist() mutex_unlock failed rc=%d", rc);
} }
@ -160,7 +169,8 @@ void tidy_servers(srv_list ** fdp)
void add_server(srv_list **fdp, char *name, int hops, char *prod, char *vers, char *fullname, char *router) void add_server(srv_list **fdp, char *name, int hops, char *prod, char *vers, char *fullname, char *router)
{ {
srv_list *tmp, *ta; srv_list *tmp, *ta;
int rc;
Syslog('r', "add_server %s %d %s %s %s", name, hops, prod, vers, fullname); Syslog('r', "add_server %s %d %s %s %s", name, hops, prod, vers, fullname);
@ -171,6 +181,9 @@ void add_server(srv_list **fdp, char *name, int hops, char *prod, char *vers, ch
} }
} }
if ((rc = pthread_mutex_lock(&b_mutex)))
Syslog('!', "add_server() mutex_lock failed rc=%d", rc);
tmp = (srv_list *)malloc(sizeof(srv_list)); tmp = (srv_list *)malloc(sizeof(srv_list));
memset(tmp, 0, sizeof(tmp)); memset(tmp, 0, sizeof(tmp));
tmp->next = NULL; tmp->next = NULL;
@ -192,6 +205,9 @@ void add_server(srv_list **fdp, char *name, int hops, char *prod, char *vers, ch
break; break;
} }
} }
if ((rc = pthread_mutex_unlock(&b_mutex)))
Syslog('!', "fill_ncslist() mutex_unlock failed rc=%d", rc);
} }
@ -201,12 +217,17 @@ void add_server(srv_list **fdp, char *name, int hops, char *prod, char *vers, ch
*/ */
void del_server(srv_list **fap, char *name) void del_server(srv_list **fap, char *name)
{ {
srv_list *ta, *tan; srv_list *ta, *tan;
int rc;
Syslog('r', "delserver %s", name); Syslog('r', "delserver %s", name);
if (*fap == NULL) if (*fap == NULL)
return; return;
if ((rc = pthread_mutex_lock(&b_mutex)))
Syslog('!', "del_server() mutex_lock failed rc=%d", rc);
for (ta = *fap; ta; ta = ta->next) { for (ta = *fap; ta; ta = ta->next) {
while ((tan = ta->next) && (strcmp(tan->server, name) == 0)) { while ((tan = ta->next) && (strcmp(tan->server, name) == 0)) {
ta->next = tan->next; ta->next = tan->next;
@ -214,6 +235,9 @@ void del_server(srv_list **fap, char *name)
} }
ta->next = tan; ta->next = tan;
} }
if ((rc = pthread_mutex_unlock(&b_mutex)))
Syslog('!', "del_server() mutex_unlock failed rc=%d", rc);
} }
@ -223,12 +247,17 @@ void del_server(srv_list **fap, char *name)
*/ */
void del_router(srv_list **fap, char *name) void del_router(srv_list **fap, char *name)
{ {
srv_list *ta, *tan; srv_list *ta, *tan;
int rc;
Syslog('r', "delrouter %s", name); Syslog('r', "delrouter %s", name);
if (*fap == NULL) if (*fap == NULL)
return; return;
if ((rc = pthread_mutex_lock(&b_mutex)))
Syslog('!', "del_router() mutex_lock failed rc=%d", rc);
for (ta = *fap; ta; ta = ta->next) { for (ta = *fap; ta; ta = ta->next) {
while ((tan = ta->next) && (strcmp(tan->router, name) == 0)) { while ((tan = ta->next) && (strcmp(tan->router, name) == 0)) {
ta->next = tan->next; ta->next = tan->next;
@ -236,6 +265,9 @@ void del_router(srv_list **fap, char *name)
} }
ta->next = tan; ta->next = tan;
} }
if ((rc = pthread_mutex_unlock(&b_mutex)))
Syslog('!', "del_router() mutex_unlock failed rc=%d", rc);
} }
@ -399,7 +431,7 @@ void check_servers(void)
case NO_RECOVERY: errmsg = (char *)"Non recoverable errors"; break; case NO_RECOVERY: errmsg = (char *)"Non recoverable errors"; break;
default: errmsg = (char *)"Unknown error"; break; default: errmsg = (char *)"Unknown error"; break;
} }
Syslog('+', "IBC: no IP address for %s: %s", tnsl->server, errmsg); Syslog('!', "IBC: no IP address for %s: %s", tnsl->server, errmsg);
tnsl->action = now + (time_t)120; tnsl->action = now + (time_t)120;
tnsl->state = NCS_FAIL; tnsl->state = NCS_FAIL;
changed = TRUE; changed = TRUE;
@ -408,7 +440,7 @@ void check_servers(void)
tnsl->socket = socket(AF_INET, SOCK_DGRAM, 0); tnsl->socket = socket(AF_INET, SOCK_DGRAM, 0);
if (tnsl->socket == -1) { if (tnsl->socket == -1) {
Syslog('+', "$IBC: can't create socket for %s", tnsl->server); Syslog('!', "$IBC: can't create socket for %s", tnsl->server);
tnsl->state = NCS_FAIL; tnsl->state = NCS_FAIL;
tnsl->action = now + (time_t)120; tnsl->action = now + (time_t)120;
changed = TRUE; changed = TRUE;
@ -446,7 +478,6 @@ void check_servers(void)
Syslog('r', "%s waitpwd", tnsl->server); Syslog('r', "%s waitpwd", tnsl->server);
tnsl->token = 0; tnsl->token = 0;
tnsl->state = NCS_CALL; tnsl->state = NCS_CALL;
srand(getpid());
while (TRUE) { while (TRUE) {
j = 1+(int) (1.0 * CFG.dialdelay * rand() / (RAND_MAX + 1.0)); j = 1+(int) (1.0 * CFG.dialdelay * rand() / (RAND_MAX + 1.0));
if ((j > (CFG.dialdelay / 10)) && (j > 9)) if ((j > (CFG.dialdelay / 10)) && (j > 9))
@ -842,6 +873,7 @@ void *ibc_thread(void *dummy)
} }
ibc_run = TRUE; ibc_run = TRUE;
srand(getpid());
while (! T_Shutdown) { while (! T_Shutdown) {