summaryrefslogtreecommitdiff
path: root/accel-pptpd/ctrl
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2010-11-21 17:31:00 +0300
committerDmitry Kozlov <xeb@mail.ru>2010-11-21 17:31:00 +0300
commita09fdabf7939819581c6b7797b180a18c4f477fa (patch)
tree4cfaa02377ff7a660c53099c300de0890dff5d3f /accel-pptpd/ctrl
parentddad202eca1c0a1d95321bd396df0dda01620a2b (diff)
downloadaccel-ppp-a09fdabf7939819581c6b7797b180a18c4f477fa.tar.gz
accel-ppp-a09fdabf7939819581c6b7797b180a18c4f477fa.zip
bug fixes
Diffstat (limited to 'accel-pptpd/ctrl')
-rw-r--r--accel-pptpd/ctrl/l2tp/l2tp.c12
-rw-r--r--accel-pptpd/ctrl/pppoe/pppoe.c12
-rw-r--r--accel-pptpd/ctrl/pptp/pptp.c19
3 files changed, 22 insertions, 21 deletions
diff --git a/accel-pptpd/ctrl/l2tp/l2tp.c b/accel-pptpd/ctrl/l2tp/l2tp.c
index 18ba6d02..b860f577 100644
--- a/accel-pptpd/ctrl/l2tp/l2tp.c
+++ b/accel-pptpd/ctrl/l2tp/l2tp.c
@@ -119,11 +119,11 @@ static void l2tp_disconnect(struct l2tp_conn_t *conn)
triton_timer_del(&conn->hello_timer);
if (conn->state == STATE_PPP) {
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
conn->state = STATE_FIN;
ppp_terminate(&conn->ppp, TERM_USER_REQUEST, 1);
} else if (conn->state != STATE_FIN)
- __sync_fetch_and_sub(&stat_starting, 1);
+ stat_starting--;
pthread_mutex_lock(&l2tp_lock);
l2tp_conn[conn->tid] = NULL;
@@ -211,6 +211,7 @@ static void l2tp_conn_close(struct triton_context_t *ctx)
struct l2tp_conn_t *conn = container_of(ctx, typeof(*conn), ctx);
if (conn->state == STATE_PPP) {
+ stat_active--;
conn->state = STATE_FIN;
ppp_terminate(&conn->ppp, TERM_ADMIN_RESET, 1);
}
@@ -330,7 +331,7 @@ static int l2tp_tunnel_alloc(struct l2tp_serv_t *serv, struct l2tp_packet_t *pac
triton_context_call(&conn->ctx, (triton_event_func)l2tp_send_SCCRP, conn);
- __sync_fetch_and_add(&stat_starting, 1);
+ stat_starting++;
return 0;
@@ -392,8 +393,8 @@ static int l2tp_connect(struct l2tp_conn_t *conn)
if (establish_ppp(&conn->ppp))
return -1;
- __sync_fetch_and_sub(&stat_starting, 1);
- __sync_fetch_and_add(&stat_active, 1);
+ stat_starting--;
+ stat_active++;
conn->state = STATE_PPP;
@@ -803,6 +804,7 @@ static int l2tp_recv_CDN(struct l2tp_conn_t *conn, struct l2tp_packet_t *pack)
}
if (conn->state == STATE_PPP) {
+ stat_active--;
conn->state = STATE_FIN;
ppp_terminate(&conn->ppp, TERM_USER_REQUEST, 1);
}
diff --git a/accel-pptpd/ctrl/pppoe/pppoe.c b/accel-pptpd/ctrl/pppoe/pppoe.c
index eacecc9b..0ff166c3 100644
--- a/accel-pptpd/ctrl/pppoe/pppoe.c
+++ b/accel-pptpd/ctrl/pppoe/pppoe.c
@@ -80,7 +80,7 @@ void pppoe_server_free(struct pppoe_serv_t *serv);
static void disconnect(struct pppoe_conn_t *conn)
{
if (conn->ppp_started) {
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
conn->ppp_started = 0;
ppp_terminate(&conn->ppp, TERM_USER_REQUEST, 1);
}
@@ -130,9 +130,9 @@ static void ppp_finished(struct ppp_t *ppp)
log_ppp_debug("pppoe: ppp finished\n");
if (conn->ppp_started) {
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
conn->ppp_started = 0;
- disconnect(conn);
+ triton_context_call(&conn->ctx, (triton_event_func)disconnect, conn);
}
}
@@ -534,7 +534,7 @@ static void free_delayed_pado(struct delayed_pado_t *pado)
{
triton_timer_del(&pado->timer);
- __sync_fetch_and_sub(&stat_delayed_pado, 1);
+ stat_delayed_pado--;
list_del(&pado->entry);
if (pado->host_uniq)
@@ -643,7 +643,7 @@ static void pppoe_recv_PADI(struct pppoe_serv_t *serv, uint8_t *pack, int size)
triton_timer_add(&serv->ctx, &pado->timer, 0);
list_add_tail(&pado->entry, &serv->pado_list);
- __sync_fetch_and_add(&stat_delayed_pado, 1);
+ stat_delayed_pado++;
} else
pppoe_send_PADO(serv, ethhdr->h_source, host_uniq_tag, relay_sid_tag, service_name_tag);
}
@@ -744,7 +744,7 @@ static void pppoe_recv_PADR(struct pppoe_serv_t *serv, uint8_t *pack, int size)
if (connect_channel(conn))
disconnect(conn);
else {
- __sync_fetch_and_add(&stat_active, 1);
+ stat_active++;
conn->ppp_started = 1;
}
}
diff --git a/accel-pptpd/ctrl/pptp/pptp.c b/accel-pptpd/ctrl/pptp/pptp.c
index a07b21e3..608be306 100644
--- a/accel-pptpd/ctrl/pptp/pptp.c
+++ b/accel-pptpd/ctrl/pptp/pptp.c
@@ -82,11 +82,11 @@ static void disconnect(struct pptp_conn_t *conn)
triton_timer_del(&conn->echo_timer);
if (conn->state == STATE_PPP) {
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
conn->state = STATE_CLOSE;
ppp_terminate(&conn->ppp, TERM_USER_REQUEST, 1);
} else if (conn->state != STATE_CLOSE)
- __sync_fetch_and_sub(&stat_starting, 1);
+ stat_starting--;
triton_event_fire(EV_CTRL_FINISHED, &conn->ppp);
@@ -329,8 +329,8 @@ static int pptp_out_call_rqst(struct pptp_conn_t *conn)
return -1;
}
conn->state = STATE_PPP;
- __sync_fetch_and_sub(&stat_starting, 1);
- __sync_fetch_and_add(&stat_active, 1);
+ stat_starting--;
+ stat_active++;
if (conn->timeout_timer.tpd)
triton_timer_del(&conn->timeout_timer);
@@ -367,11 +367,10 @@ static int pptp_call_clear_rqst(struct pptp_conn_t *conn)
log_ppp_info("recv [PPTP Call-Clear-Request <Call-ID %x>]\n", ntohs(rqst->call_id));
if (conn->state == STATE_PPP) {
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
conn->state = STATE_CLOSE;
ppp_terminate(&conn->ppp, TERM_USER_REQUEST, 1);
- } else
- __sync_fetch_and_sub(&stat_starting, 1);
+ }
return send_pptp_call_disconnect_notify(conn, 4);
}
@@ -550,7 +549,7 @@ static void pptp_close(struct triton_context_t *ctx)
{
struct pptp_conn_t *conn = container_of(ctx, typeof(*conn), ctx);
if (conn->state == STATE_PPP) {
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
conn->state = STATE_CLOSE;
ppp_terminate(&conn->ppp, TERM_ADMIN_RESET, 1);
if (send_pptp_call_disconnect_notify(conn, 3)) {
@@ -580,7 +579,7 @@ static void ppp_finished(struct ppp_t *ppp)
if (conn->state != STATE_CLOSE) {
log_ppp_debug("pptp: ppp finished\n");
conn->state = STATE_CLOSE;
- __sync_fetch_and_sub(&stat_active, 1);
+ stat_active--;
if (send_pptp_call_disconnect_notify(conn, 3))
triton_context_call(&conn->ctx, (void (*)(void*))disconnect, conn);
@@ -668,7 +667,7 @@ static int pptp_connect(struct triton_md_handler_t *h)
triton_event_fire(EV_CTRL_STARTING, &conn->ppp);
- __sync_fetch_and_add(&stat_starting, 1);
+ stat_starting++;
}
return 0;
}