summaryrefslogtreecommitdiff
path: root/accel-pppd/extra/sigchld.c
diff options
context:
space:
mode:
authorDmitry Kozlov <xeb@mail.ru>2017-12-07 16:02:11 +0300
committerDmitry Kozlov <xeb@mail.ru>2017-12-07 16:02:11 +0300
commitabc8e981b69732b7a23ab36b437811f7b4b9bd8a (patch)
tree39699eb1470c49bf1d08ec19b2380f7bbd21c3d5 /accel-pppd/extra/sigchld.c
parent28cafaac477170d9dabf970d33da0b45bafebe49 (diff)
downloadaccel-ppp-abc8e981b69732b7a23ab36b437811f7b4b9bd8a.tar.gz
accel-ppp-abc8e981b69732b7a23ab36b437811f7b4b9bd8a.zip
pppd_compat: fixed bug caused fork queue to stall
Diffstat (limited to 'accel-pppd/extra/sigchld.c')
-rw-r--r--accel-pppd/extra/sigchld.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/accel-pppd/extra/sigchld.c b/accel-pppd/extra/sigchld.c
index cfce2cd2..d03a7ff0 100644
--- a/accel-pppd/extra/sigchld.c
+++ b/accel-pppd/extra/sigchld.c
@@ -82,16 +82,21 @@ void __export sigchld_register_handler(struct sigchld_handler_t *h)
pthread_mutex_unlock(&handlers_lock);
}
-void __export sigchld_unregister_handler(struct sigchld_handler_t *h)
+int __export sigchld_unregister_handler(struct sigchld_handler_t *h)
{
+ int r = 0;
+
pthread_mutex_lock(&handlers_lock);
pthread_mutex_lock(&h->lock);
if (h->pid) {
list_del(&h->entry);
h->pid = 0;
+ r = 1;
}
pthread_mutex_unlock(&h->lock);
pthread_mutex_unlock(&handlers_lock);
+
+ return r;
}
void __export sigchld_lock()