Added some mutex locking
This commit is contained in:
parent
8576d89acc
commit
4eedaf9bd0
@ -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,10 +169,11 @@ 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);
|
||||||
|
|
||||||
for (ta = *fdp; ta; ta = ta->next) {
|
for (ta = *fdp; ta; ta = ta->next) {
|
||||||
if (strcmp(ta->server, name) == 0) {
|
if (strcmp(ta->server, name) == 0) {
|
||||||
Syslog('r', "duplicate, ignore");
|
Syslog('r', "duplicate, ignore");
|
||||||
@ -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) {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user