summaryrefslogtreecommitdiff
path: root/src/libunixonacid/unixmessage_unput.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2016-04-22 11:54:31 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2016-04-22 11:54:31 +0000
commitf6d5fcfa0fa2a62f9583fa44dbee035c0adfcc88 (patch)
tree206cd7e9606bf5488f70e6eddb3aadbb35bafe1b /src/libunixonacid/unixmessage_unput.c
parente9fce4390ad8673239a51facd6bbd9ffb5eb7e68 (diff)
downloadskalibs-f6d5fcfa0fa2a62f9583fa44dbee035c0adfcc88.tar.xz
Fix closecb support wherever a unixmessage may get dropped; add closecb support to unixconnection
Diffstat (limited to 'src/libunixonacid/unixmessage_unput.c')
-rw-r--r--src/libunixonacid/unixmessage_unput.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/libunixonacid/unixmessage_unput.c b/src/libunixonacid/unixmessage_unput.c
index 63e94b8..e869110 100644
--- a/src/libunixonacid/unixmessage_unput.c
+++ b/src/libunixonacid/unixmessage_unput.c
@@ -9,14 +9,15 @@ int unixmessage_unput_and_maybe_drop (unixmessage_sender_t *b, int drop)
{
diuint *start ;
unsigned int n = genalloc_len(diuint, &b->offsets) ;
+ register int *fds ;
+ register unsigned int i ;
if (!n) return 0 ;
start = genalloc_s(diuint, &b->offsets) + n - 1 ;
- if (drop)
- {
- register int *fds = genalloc_s(int, &b->fds) + start->right ;
- register unsigned int i = genalloc_len(int, &b->fds) - start->right ;
- while (i--) fd_close(fds[i] < 0 ? -(fds[i]+1) : fds[i]) ;
- }
+ fds = genalloc_s(int, &b->fds) + start->right ;
+ i = genalloc_len(int, &b->fds) - start->right ;
+ while (i--)
+ if (fds[i] < 0) (*b->closecb)(-(fds[i]+1), b->closecbdata) ;
+ else if (drop) fd_close(fds[i]) ;
b->data.len = start->left ;
genalloc_setlen(int, &b->fds, start->right) ;
genalloc_setlen(diuint, &b->offsets, n-1) ;