private void HandleThreadDeath(object sender, ThreadEventArgs e) { if (e.SuspendPolicy == SuspendPolicy.All) { Interlocked.Increment(ref _suspended); } JavaDebugThread thread; lock (_threads) { this._threads.TryGetValue(e.Thread.GetUniqueId(), out thread); } //string name = thread.GetName(); DebugEvent debugEvent = new DebugThreadDestroyEvent(GetAttributesForEvent(e), 0); SetEventProperties(debugEvent, e, false); Callback.Event(DebugEngine, Process, this, thread, debugEvent); lock (_threads) { this._threads.Remove(e.Thread.GetUniqueId()); } }
public void HandleThreadEnd(JvmEventsService.JvmVirtualMachineRemoteHandle virtualMachine, JvmEventsService.JvmThreadRemoteHandle threadHandle) { int hashCode; JvmToolsService.jvmtiError result = Program.ToolsService.GetObjectHashCode(out hashCode, virtualMachine, threadHandle); if (result == 0) { JavaDebugThread thread = Program._threads[hashCode]; DebugEvent @event = new DebugThreadDestroyEvent(enum_EVENTATTRIBUTES.EVENT_SYNCHRONOUS, 0); Guid guid = typeof(IDebugThreadDestroyEvent2).GUID; enum_EVENTATTRIBUTES attrib = @event.GetAttributes(); Program.Callback.Event(Program.DebugEngine, Program.Process, Program, thread, @event, ref guid, (uint)attrib); Program._threads.Remove(hashCode); } }