{
AST_LIST_LOCK(&sessions);
AST_LIST_REMOVE(&sessions, s, list);
+ num_sessions--;
AST_LIST_UNLOCK(&sessions);
- ast_atomic_fetchadd_int(&num_sessions, -1);
free_session(s);
}
AST_LIST_TRAVERSE_SAFE_BEGIN(&sessions, s, list) {
if (s->sessiontimeout && (now > s->sessiontimeout) && !s->inuse) {
AST_LIST_REMOVE_CURRENT(&sessions, list);
+ num_sessions--;
if (s->authenticated && (option_verbose > 1) && displayconnects) {
ast_verbose(VERBOSE_PREFIX_2 "HTTP Manager '%s' timed out from %s\n",
s->username, ast_inet_ntoa(s->sin.sin_addr));
free(eqe);
}
AST_LIST_UNLOCK(&sessions);
- if (s)
- ast_atomic_fetchadd_int(&num_sessions, -1);
sinlen = sizeof(sin);
pfds[0].fd = asock;
if (!(s = ast_calloc(1, sizeof(*s))))
continue;
- ast_atomic_fetchadd_int(&num_sessions, 1);
-
memcpy(&s->sin, &sin, sizeof(sin));
s->writetimeout = 100;
s->waiting_thread = AST_PTHREADT_NULL;
s->send_events = -1;
AST_LIST_LOCK(&sessions);
AST_LIST_INSERT_HEAD(&sessions, s, list);
+ num_sessions++;
/* Find the last place in the master event queue and hook ourselves
in there */
s->eventq = master_eventq;
while(s->eventq->next)
s->eventq = s->eventq->next;
- AST_LIST_UNLOCK(&sessions);
ast_atomic_fetchadd_int(&s->eventq->usecount, 1);
+ AST_LIST_UNLOCK(&sessions);
if (ast_pthread_create_background(&s->t, &attr, session_do, s))
destroy_session(s);
}
s->eventq = master_eventq;
while (s->eventq->next)
s->eventq = s->eventq->next;
- AST_LIST_UNLOCK(&sessions);
ast_atomic_fetchadd_int(&s->eventq->usecount, 1);
ast_atomic_fetchadd_int(&num_sessions, 1);
+ AST_LIST_UNLOCK(&sessions);
}
/* Reset HTTP timeout. If we're not yet authenticated, keep it extremely short */