GDBThread.st
changeset 67 c4ac76afe03d
parent 55 437ee6413c74
child 70 6d7285bb1703
--- a/GDBThread.st	Sun Mar 08 12:40:03 2015 +0000
+++ b/GDBThread.st	Sun Mar 08 15:48:16 2015 +0000
@@ -1,9 +1,11 @@
+"{ Encoding: utf8 }"
+
 "{ Package: 'jv:libgdbs' }"
 
 "{ NameSpace: Smalltalk }"
 
 GDBDebuggerObject subclass:#GDBThread
-	instanceVariableNames:'id group status stack'
+	instanceVariableNames:'id group info stack'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'GDB-Core'
@@ -66,7 +68,28 @@
 !
 
 status
-    ^ status
+    ^ self info state
+
+    "Modified: / 08-03-2015 / 09:10:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThread methodsFor:'accessing-private'!
+
+info
+    info isNil ifTrue:[
+        info := GDBTransientDataHolder debugger: debugger factory:[ 
+            | result infos |
+
+            result := debugger send: (GDBMI_thread_info new arguments: { id }).
+            infos := result propertyAt: #threads.
+            self assert: (infos isEmptyOrNil or:[ infos size == 1 and:[ infos first id = id ] ]).
+            infos isEmptyOrNil ifTrue:[ GDBThreadInfo new setId: id state: GDBThreadStateTerminated theOneAndOnlyInstance ] ifFalse:[ infos first ]
+        ].
+    ].
+    ^ info value
+
+    "Created: / 08-03-2015 / 09:07:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 12:35:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBThread methodsFor:'initialization'!
@@ -81,28 +104,15 @@
 setId: tid
     self assert: id isNil.
     id := tid.
-    status := GDBThreadStateRunning theOneAndOnlyInstance
 
     "Created: / 07-09-2014 / 21:31:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 27-02-2015 / 09:36:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-setStatus: aGDBThreadState
-    status := aGDBThreadState.
-    status isStopped ifFalse:[
-        stack := nil.
-    ].
-
-    "Created: / 07-09-2014 / 23:25:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 09-09-2014 / 00:04:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified (format): / 27-02-2015 / 09:36:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 09:08:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setTerminated
-    status := GDBThreadStateTerminated theOneAndOnlyInstance
 
     "Created: / 07-09-2014 / 21:37:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 27-02-2015 / 09:36:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 09:08:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBThread methodsFor:'printing & storing'!
@@ -115,10 +125,10 @@
 "/    aStream nextPutAll:'in group '.
 "/    group id printOn:aStream.
     aStream nextPutAll:' ['.
-    status printOn:aStream.
+    self status printOn:aStream.
     aStream nextPutAll:']'.
 
-    "Modified: / 22-09-2014 / 00:59:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 09:07:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBThread methodsFor:'private'!
@@ -138,26 +148,30 @@
 !GDBThread methodsFor:'testing'!
 
 isDead
-    ^ status isTerminated
+    ^ self status isTerminated
 
     "Created: / 22-09-2014 / 00:54:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 12:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 isRunning
-    ^ status isRunning
+    ^ self status isRunning
 
     "Created: / 07-09-2014 / 23:23:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 09:08:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 isStopped
-    ^ status isStopped
+    ^ self status isStopped
 
     "Created: / 07-09-2014 / 23:23:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 09:08:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 isTerminated
-    ^ status isTerminated
+    ^ self status isTerminated
 
     "Created: / 07-09-2014 / 23:23:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 08-03-2015 / 09:08:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !