[haiku-commits] r41963 - haiku/branches/developer/bonefish/signals/src/system/kernel

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 6 Jun 2011 13:22:49 +0200 (CEST)

Author: bonefish
Date: 2011-06-06 13:22:48 +0200 (Mon, 06 Jun 2011)
New Revision: 41963
Changeset: https://dev.haiku-os.org/changeset/41963

Modified:
   haiku/branches/developer/bonefish/signals/src/system/kernel/DPC.cpp
Log:
DPCQueue::Cancel(): Reordered the checks a bit to work correctly also, if the
callback is currently executing and already queued again.


Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/DPC.cpp
===================================================================
--- haiku/branches/developer/bonefish/signals/src/system/kernel/DPC.cpp 
2011-06-06 11:17:44 UTC (rev 41962)
+++ haiku/branches/developer/bonefish/signals/src/system/kernel/DPC.cpp 
2011-06-06 11:22:48 UTC (rev 41963)
@@ -214,15 +214,16 @@
 {
        InterruptsSpinLocker locker(fLock);
 
-       if (callback != fCallbackInProgress) {
-               // The callback is not currently being executed. Remove it, if 
queued.
-               if (callback->fInQueue != this)
-                       return false;
-
+       // If the callback is queued, remove it.
+       if (callback->fInQueue == this) {
                fCallbacks.Remove(callback);
                return true;
        }
 
+       // The callback is not queued. If it isn't in progress, we're done, too.
+       if (callback != fCallbackInProgress)
+               return false;
+
        // The callback is currently being executed. We need to wait for it to 
be
        // done.
 


Other related posts:

  • » [haiku-commits] r41963 - haiku/branches/developer/bonefish/signals/src/system/kernel - ingo_weinhold