[haiku-commits] r33730 - haiku/trunk/src/system/kernel/debug

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 22 Oct 2009 18:10:28 +0200 (CEST)

Author: axeld
Date: 2009-10-22 18:10:28 +0200 (Thu, 22 Oct 2009)
New Revision: 33730
Changeset: http://dev.haiku-os.org/changeset/33730/haiku

Modified:
   haiku/trunk/src/system/kernel/debug/user_debugger.cpp
Log:
* set_port_owner() was the only usable call of the port API, and of course it
  was used this way in the debugger. Doing this later should be harmless,
  AFAICT, but Ingo will probably know better.
* Beware, though, the debugger currently does not work anymore.


Modified: haiku/trunk/src/system/kernel/debug/user_debugger.cpp
===================================================================
--- haiku/trunk/src/system/kernel/debug/user_debugger.cpp       2009-10-22 
14:00:17 UTC (rev 33729)
+++ haiku/trunk/src/system/kernel/debug/user_debugger.cpp       2009-10-22 
16:10:28 UTC (rev 33730)
@@ -2512,6 +2512,7 @@
        bool releaseDebugInfoLock = true;
        port_id oldDebuggerPort = -1;
        port_id nubPort = -1;
+       bool handOverPort = false;
 
        cpu_status state = disable_interrupts();
        GRAB_TEAM_DEBUG_INFO_LOCK(team->debug_info);
@@ -2546,16 +2547,7 @@
                                releaseDebugInfoLock = false;
                                handOver = true;
                                done = true;
-
-                               // finally set the new port owner
-                               if (set_port_owner(nubPort, debuggerTeam) != 
B_OK) {
-                                       // The old debugger must just have 
died. Just proceed as
-                                       // if there was no debugger installed. 
We may still be too
-                                       // early, in which case we'll fail, but 
this race condition
-                                       // should be unbelievably rare and 
relatively harmless.
-                                       handOver = false;
-                                       done = false;
-                               }
+                               handOverPort = true;
                        }
                } else {
                        // there's already a debugger installed
@@ -2576,6 +2568,15 @@
 
        restore_interrupts(state);
 
+       if (handOverPort && set_port_owner(nubPort, debuggerTeam) != B_OK) {
+               // The old debugger must just have died. Just proceed as
+               // if there was no debugger installed. We may still be too
+               // early, in which case we'll fail, but this race condition
+               // should be unbelievably rare and relatively harmless.
+               handOver = false;
+               done = false;
+       }
+
        if (handOver) {
                // prepare the handed-over message
                debug_handed_over notification;


Other related posts: