r3183: moved the unlink of the messaging unixdom socket to the messaging destructor
[bbaumbach/samba-autobuild/.git] / source4 / lib / messaging / messaging.c
index a0aabbbc2197702c021052243b38311f662d18ce..13c1a049f8470afb3923829ce0a1e435433a39d6 100644 (file)
@@ -95,8 +95,9 @@ static char *messaging_path(TALLOC_CTX *mem_ctx, servid_t server_id)
 */
 static void messaging_dispatch(struct messaging_state *msg, struct messaging_rec *rec)
 {
-       struct dispatch_fn *d;
-       for (d=msg->dispatch;d;d=d->next) {
+       struct dispatch_fn *d, *next;
+       for (d=msg->dispatch;d;d=next) {
+               next = d->next;
                if (d->msg_type == rec->header.msg_type) {
                        d->fn(msg, d->private, d->msg_type, rec->header.from, &rec->data);
                }
@@ -250,14 +251,15 @@ void messaging_register(void *ctx, void *private,
 /*
   De-register the function for a particular message type.
 */
-void messaging_deregister(void *ctx, uint32_t msg_type)
+void messaging_deregister(void *ctx, uint32_t msg_type, void *private)
 {
        struct messaging_state *msg = ctx;
        struct dispatch_fn *d, *next;
 
        for (d = msg->dispatch; d; d = next) {
                next = d->next;
-               if (d->msg_type == msg_type) {
+               if (d->msg_type == msg_type && 
+                   d->private == private) {
                        DLIST_REMOVE(msg->dispatch, d);
                        talloc_free(d);
                }
@@ -433,6 +435,7 @@ static int messaging_destructor(void *msg_ctx)
 {
        struct messaging_state *msg = msg_ctx;
        event_remove_fd(msg->event.ev, msg->event.fde);
+       unlink(msg->path);
        return 0;
 }