[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
This commit is contained in:
SND\ussrhero_cp 2015-01-06 20:29:46 +00:00 committed by Mikhail I. Izmestev
parent 1f8b79e6c4
commit cc27289a55
2 changed files with 18 additions and 1 deletions

View File

@ -462,6 +462,7 @@ Breakpoint* Breakpoint::getBreakpointByIndex(unsigned long index)
void Breakpoint::remove() void Breakpoint::remove()
{ {
AutoRestorePyState pystate;
m_breakpoint->remove(); m_breakpoint->remove();
m_breakpoint = 0; m_breakpoint = 0;
} }

View File

@ -114,6 +114,7 @@ class BreakpointTest( unittest.TestCase ):
self.assertEqual( 1, handler.count ) self.assertEqual( 1, handler.count )
def testBreakpointClass(self): def testBreakpointClass(self):
class MyBreakpoint(pykd.breakpoint): class MyBreakpoint(pykd.breakpoint):
@ -165,7 +166,6 @@ class BreakpointTest( unittest.TestCase ):
bp = pykd.setBp( targetModule.CdeclFunc, makebpcallback(100) ) bp = pykd.setBp( targetModule.CdeclFunc, makebpcallback(100) )
self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() ) self.assertEqual( pykd.executionStatus.NoDebuggee, pykd.go() )
def testBreakpointEnum(self): def testBreakpointEnum(self):
processId = pykd.startProcess( target.appPath + " breakhandlertest" ) processId = pykd.startProcess( target.appPath + " breakhandlertest" )
targetModule = pykd.module( target.moduleName ) targetModule = pykd.module( target.moduleName )
@ -183,3 +183,19 @@ class BreakpointTest( unittest.TestCase ):
map( lambda bp: bp.remove(), bpLst) map( lambda bp: bp.remove(), bpLst)
self.assertEqual(0, pykd.getNumberBreakpoints()); 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())