summaryrefslogtreecommitdiff
path: root/accel-pptpd/ctrl/pppoe/pppoe.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-11-29 13:01:18 +0300
committerKozlov Dmitry <dima@server>2010-11-29 13:01:18 +0300
commit369689ab48d7d213f66d338f5f090366b2bce56c (patch)
treebf0f6069c201f637ca645330c7fd5b410e11b40f /accel-pptpd/ctrl/pppoe/pppoe.c
parent43803998812ee949cbe02a121030888c51a9aad2 (diff)
downloadaccel-ppp-xebd-369689ab48d7d213f66d338f5f090366b2bce56c.tar.gz
accel-ppp-xebd-369689ab48d7d213f66d338f5f090366b2bce56c.zip
use atomic operation on statistics update operations
Diffstat (limited to 'accel-pptpd/ctrl/pppoe/pppoe.c')
-rw-r--r--accel-pptpd/ctrl/pppoe/pppoe.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/accel-pptpd/ctrl/pppoe/pppoe.c b/accel-pptpd/ctrl/pppoe/pppoe.c
index daa07b7..24d2405 100644
--- a/accel-pptpd/ctrl/pppoe/pppoe.c
+++ b/accel-pptpd/ctrl/pppoe/pppoe.c
@@ -82,7 +82,7 @@ void pppoe_server_free(struct pppoe_serv_t *serv);
static void disconnect(struct pppoe_conn_t *conn)
{
if (conn->ppp_started) {
- stat_active--;
+ __sync_sub_and_fetch(&stat_active, 1);
conn->ppp_started = 0;
ppp_terminate(&conn->ppp, TERM_USER_REQUEST, 1);
}
@@ -132,7 +132,7 @@ static void ppp_finished(struct ppp_t *ppp)
log_ppp_debug("pppoe: ppp finished\n");
if (conn->ppp_started) {
- stat_active--;
+ __sync_sub_and_fetch(&stat_active, 1);
conn->ppp_started = 0;
triton_context_call(&conn->ctx, (triton_event_func)disconnect, conn);
}
@@ -546,7 +546,7 @@ static void free_delayed_pado(struct delayed_pado_t *pado)
{
triton_timer_del(&pado->timer);
- stat_delayed_pado--;
+ __sync_sub_and_fetch(&stat_delayed_pado, 1);
list_del(&pado->entry);
if (pado->host_uniq)
@@ -655,7 +655,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);
- stat_delayed_pado++;
+ __sync_add_and_fetch(&stat_delayed_pado, 1);
} else
pppoe_send_PADO(serv, ethhdr->h_source, host_uniq_tag, relay_sid_tag, service_name_tag);
}
@@ -756,7 +756,7 @@ static void pppoe_recv_PADR(struct pppoe_serv_t *serv, uint8_t *pack, int size)
if (connect_channel(conn))
disconnect(conn);
else {
- stat_active++;
+ __sync_add_and_fetch(&stat_active, 1);
conn->ppp_started = 1;
}
}