From cc27289a555a8c924b64f6c330dc4ea4def25b8f Mon Sep 17 00:00:00 2001
From: "SND\\ussrhero_cp"
 <SND\ussrhero_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Tue, 6 Jan 2015 20:29:46 +0000
Subject: [PATCH] [0.3.x] added : fixed probably deadlock in breakpoint::remove
 method

git-svn-id: https://pykd.svn.codeplex.com/svn@89579 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/pyeventhandler.cpp    |  1 +
 test/scripts/breakpoint.py | 18 +++++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/pykd/pyeventhandler.cpp b/pykd/pyeventhandler.cpp
index 7da46a5..9a94222 100644
--- a/pykd/pyeventhandler.cpp
+++ b/pykd/pyeventhandler.cpp
@@ -462,6 +462,7 @@ Breakpoint* Breakpoint::getBreakpointByIndex(unsigned long index)
 
 void Breakpoint::remove() 
 {
+    AutoRestorePyState  pystate;
     m_breakpoint->remove();
     m_breakpoint = 0;
 }
diff --git a/test/scripts/breakpoint.py b/test/scripts/breakpoint.py
index 9e3f9bb..c87f42c 100644
--- a/test/scripts/breakpoint.py
+++ b/test/scripts/breakpoint.py
@@ -114,6 +114,7 @@ class BreakpointTest( unittest.TestCase ):
 
             self.assertEqual( 1, handler.count )
 
+
     def testBreakpointClass(self):
 
         class MyBreakpoint(pykd.breakpoint):
@@ -165,7 +166,6 @@ class BreakpointTest( unittest.TestCase ):
             bp = pykd.setBp( targetModule.CdeclFunc, makebpcallback(100) )
             self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
 
-
     def testBreakpointEnum(self):
         processId = pykd.startProcess( target.appPath + " breakhandlertest" )
         targetModule = pykd.module( target.moduleName )
@@ -183,3 +183,19 @@ class BreakpointTest( unittest.TestCase ):
             map( lambda bp: bp.remove(), bpLst)
             self.assertEqual(0, pykd.getNumberBreakpoints());
 
+    def testBreakpointChangeHandler(self):
+
+        class BreakpointChangeHandler( pykd.eventHandler ):
+
+            def onChangeBreakpoints(self):
+                pass
+
+        processId = pykd.startProcess( target.appPath + " breakhandlertest" )
+        targetModule = pykd.module( target.moduleName )
+        targetModule.reload()
+        with testutils.ContextCallIt( testutils.KillProcess(processId) ) as killStartedProcess :
+            pykd.go()
+            handler = BreakpointChangeHandler()
+            bp = pykd.setBp( targetModule.CdeclFunc)
+            bp.remove()
+            self.assertEqual(0, pykd.getNumberBreakpoints())