Author: tack
Date: Sun Oct 16 19:15:11 2005
New Revision: 870

Modified:
   trunk/base/src/notifier/callback.py

Log:
Added set_prevent_recursion() method to Callback base class, which prevents
a callback from recursing into itself.


Modified: trunk/base/src/notifier/callback.py
==============================================================================
--- trunk/base/src/notifier/callback.py (original)
+++ trunk/base/src/notifier/callback.py Sun Oct 16 19:15:11 2005
@@ -119,6 +119,8 @@
         self._kwargs = kwargs
         self._ignore_caller_args = False
         self._user_args_first = False
+        self._prevent_recursion = False
+        self._entered = False
 
 
     def set_ignore_caller_args(self, flag = True):
@@ -128,6 +130,8 @@
     def set_user_args_first(self, flag = True):
         self._user_args_first = flag
 
+    def set_prevent_recursion(self, flag = True):
+        self._prevent_recursion = flag
 
     def _get_callback(self):
         return self._callback
@@ -150,13 +154,19 @@
         """
         Call the callback function.
         """
+        if self._entered and self._prevent_recursion:
+            return
+
         cb = self._get_callback()
         cb_args, cb_kwargs = self._merge_args(args, kwargs)
         if not cb:
             # Is it wise to fail so gracefully here?
             return
 
-        return cb(*cb_args, **cb_kwargs)
+        self._entered = True
+        result = cb(*cb_args, **cb_kwargs)
+        self._entered = False
+        return result
 
 
     def __str__(self):


-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to