]> git.decadent.org.uk Git - ion3.git/blobdiff - libmainloop/defer.c
[svn-upgrade] Integrating new upstream version, ion3 (20070318)
[ion3.git] / libmainloop / defer.c
index dfc0e89df2b4baf9aefcbee1713b019cee981c30..c8d56163761dfd43ddb2549d14e8a9e0c0b571e7 100644 (file)
@@ -84,12 +84,29 @@ static void defer_watch_handler(Watch *w, Obj *obj)
     warn(TR("Object destroyed while deferred actions are still pending."));
 }
 
+
+static bool already_deferred(Obj *obj, WDeferredAction *action, 
+                             WDeferred *list)
+{
+    WDeferred *d;
+    
+    for(d=list; d!=NULL; d=d->next){
+        if(d->action==action && d->watch.obj==obj)
+            return TRUE;
+    }
     
+    return FALSE;
+}
+
+
 bool mainloop_defer_action_on_list(Obj *obj, WDeferredAction *action, 
                                    WDeferred **list)
 {
     WDeferred *d;
     
+    if(already_deferred(obj, action, *list))
+        return TRUE;
+    
     d=alloc_defer();
     
     if(d==NULL){