summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2006-12-08 18:40:13 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:16:23 -0500
commit5ce139751bb77879f127dfa876cf1999717b69fc (patch)
treedf7d0e13b04affc9df9ee1ed2696ba1823400115 /source3
parent5be92d0d1866b483ee7e9599b691044f4059ea3f (diff)
downloadsamba-5ce139751bb77879f127dfa876cf1999717b69fc.tar.gz
samba-5ce139751bb77879f127dfa876cf1999717b69fc.tar.bz2
samba-5ce139751bb77879f127dfa876cf1999717b69fc.zip
r20087: Ensure we clean up any random pending events we
may have inherited from our parent in the winbindd forked child. Jeremy. (This used to be commit 0a1352f440a9d9b974ad8d571b2e48a43a15b6cc)
Diffstat (limited to 'source3')
-rw-r--r--source3/lib/events.c15
-rw-r--r--source3/nsswitch/winbindd_dual.c10
2 files changed, 23 insertions, 2 deletions
diff --git a/source3/lib/events.c b/source3/lib/events.c
index d6f3c32828..66aefa3b52 100644
--- a/source3/lib/events.c
+++ b/source3/lib/events.c
@@ -130,3 +130,18 @@ int set_event_dispatch_time(const char *event_name, struct timeval when)
}
return num_events;
}
+
+/* Returns 1 if event was found and cancelled, 0 otherwise. */
+
+int cancel_named_event(const char *event_name)
+{
+ struct timed_event *te;
+
+ for (te = timed_events; te; te = te->next) {
+ if (strcmp(event_name, te->event_name) == 0) {
+ TALLOC_FREE(te);
+ return 1;
+ }
+ }
+ return 0;
+}
diff --git a/source3/nsswitch/winbindd_dual.c b/source3/nsswitch/winbindd_dual.c
index 7a699edb25..1a1afcb404 100644
--- a/source3/nsswitch/winbindd_dual.c
+++ b/source3/nsswitch/winbindd_dual.c
@@ -845,16 +845,22 @@ static BOOL fork_domain_child(struct winbindd_child *child)
child->domain->startup_time = time(NULL);
}
+ /* Ensure we have no pending check_online events other
+ than one for this domain. */
+
for (domain = domain_list(); domain; domain = domain->next) {
if (domain != child->domain) {
- /* Ensure we have no "check_online" events pending
- that are not on this domain. */
if (domain->check_online_event) {
TALLOC_FREE(domain->check_online_event);
}
}
}
+ /* Ensure we're not handling an event inherited from
+ our parent. */
+
+ cancel_named_event("krb5_ticket_refresh_handler");
+
while (1) {
int ret;