about summary refs log tree commit diff
path: root/src/libs6/ftrigr_unsubscribe.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-06-14 04:09:00 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-06-14 04:09:00 +0000
commit0445f2a3590f67441602a05fe3924ab677c79ff0 (patch)
tree1a011697fbd92ca53468efe019c8c93c364ad6a8 /src/libs6/ftrigr_unsubscribe.c
parentf287ac765101f21b530f1a9886e06976c165c922 (diff)
downloads6-0445f2a3590f67441602a05fe3924ab677c79ff0.tar.gz
s6-0445f2a3590f67441602a05fe3924ab677c79ff0.tar.xz
s6-0445f2a3590f67441602a05fe3924ab677c79ff0.zip
Add ftrigr_checksa(), rewrite s6_svlisten_loop() around it
 - Fixes the race condition hit by permanent failure, i.e. two ftrig events close to each other
 - Requires storing the sequence of events client-side, so an additional stralloc, bleh
 - The visible struct ftrigr_s changes, so a major bump is needed -> prepare for 2.6.0.0
 - ftrigr_check() is now a trivial wrapper around ftrigr_checksa()
Diffstat (limited to 'src/libs6/ftrigr_unsubscribe.c')
-rw-r--r--src/libs6/ftrigr_unsubscribe.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/libs6/ftrigr_unsubscribe.c b/src/libs6/ftrigr_unsubscribe.c
index 4428b72..a96ddb0 100644
--- a/src/libs6/ftrigr_unsubscribe.c
+++ b/src/libs6/ftrigr_unsubscribe.c
@@ -2,6 +2,7 @@
 
 #include <errno.h>
 #include <skalibs/uint16.h>
+#include <skalibs/stralloc.h>
 #include <skalibs/gensetdyn.h>
 #include <skalibs/skaclient.h>
 #include <s6/ftrigr.h>
@@ -30,6 +31,7 @@ int ftrigr_unsubscribe (ftrigr_t *a, uint16_t i, tain_t const *deadline, tain_t
     if (!skaclient_send(&a->connection, pack, 3, &skaclient_default_cb, &err, deadline, stamp)) return 0 ;
     if (err) return (errno = err, 0) ;
   }
+  stralloc_free(&p->what) ;
   *p = ftrigr1_zero ;
   return gensetdyn_delete(&a->data, i) ;
 }