mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r15055: this was my version for the crash bug in the messaging code...
it also makes the function a bit shorter and clearer,
as the tmp msg_types only have one handler and not a list
metze
(This used to be commit 7e709fd04d
)
This commit is contained in:
parent
aaddd93e46
commit
4f972f5c33
@ -299,8 +299,7 @@ NTSTATUS messaging_register(struct messaging_context *msg, void *private,
|
||||
msg->num_types = msg_type+1;
|
||||
}
|
||||
|
||||
|
||||
d = talloc(msg->dispatch, struct dispatch_fn);
|
||||
d = talloc_zero(msg->dispatch, struct dispatch_fn);
|
||||
NT_STATUS_HAVE_NO_MEMORY(d);
|
||||
d->msg_type = msg_type;
|
||||
d->private = private;
|
||||
@ -343,37 +342,25 @@ NTSTATUS messaging_register_tmp(struct messaging_context *msg, void *private,
|
||||
*/
|
||||
void messaging_deregister(struct messaging_context *msg, uint32_t msg_type, void *private)
|
||||
{
|
||||
struct dispatch_fn *d, *list, *next;
|
||||
struct dispatch_fn *d, *next;
|
||||
|
||||
if (msg_type >= msg->num_types) {
|
||||
list = idr_find(msg->dispatch_tree, msg_type);
|
||||
} else {
|
||||
list = msg->dispatch[msg_type];
|
||||
}
|
||||
|
||||
if (list == NULL) {
|
||||
d = idr_find(msg->dispatch_tree, msg_type);
|
||||
if (!d) return;
|
||||
idr_remove(msg->dispatch_tree, msg_type);
|
||||
talloc_free(d);
|
||||
return;
|
||||
}
|
||||
|
||||
for (d = list; d; d = next) {
|
||||
for (d = msg->dispatch[msg_type]; d; d = next) {
|
||||
next = d->next;
|
||||
if (d->private == private) {
|
||||
DLIST_REMOVE(list, d);
|
||||
DLIST_REMOVE(msg->dispatch[msg_type], d);
|
||||
talloc_free(d);
|
||||
}
|
||||
}
|
||||
|
||||
/* the list base possibly changed */
|
||||
if (msg_type >= msg->num_types) {
|
||||
if (list == NULL) {
|
||||
idr_remove(msg->dispatch_tree, msg_type);
|
||||
}
|
||||
} else {
|
||||
msg->dispatch[msg_type] = list;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Send a message to a particular server
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user