GDBEventDispatcher.st
author Jan Vrany <jan.vrany@labware.com>
Sat, 22 May 2021 16:52:20 +0100
changeset 230 ba4b57758e92
parent 228 04ce643219ce
child 235 51f916ee4111
permissions -rw-r--r--
Change `#pushEvent:` to insert event into the current event set ...if any. The reason is that sometimes events are pushed back onto a queue as part of processing command post-execute hook (this is mainly unify internal housekeeping since GDB does not generate various events when state change is caused by an MI command, see [1]). In this case we want these artifical events to be processed within current event set so internal data are in sync when `#send: ... andWait: true` returns. If there's no event set currently being processed, insert event to the end of the queue. [1]: https://sourceware.org/pipermail/gdb/2019-June/047938.html
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
219
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
     4
Copyright (C) 2021 LabWare
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
This library is free software; you can redistribute it and/or
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
modify it under the terms of the GNU Lesser General Public
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
License as published by the Free Software Foundation; either
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
version 2.1 of the License. 
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
This library is distributed in the hope that it will be useful,
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
but WITHOUT ANY WARRANTY; without even the implied warranty of
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
Lesser General Public License for more details.
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
You should have received a copy of the GNU Lesser General Public
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
License along with this library; if not, write to the Free Software
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
"{ Package: 'jv:libgdbs' }"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
"{ NameSpace: Smalltalk }"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
Object subclass:#GDBEventDispatcher
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    25
	instanceVariableNames:'debugger queue lock thread announcer1 announcer2'
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	classVariableNames:''
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	poolDictionaries:'GDBDebugFlags'
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	category:'GDB-Private'
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!GDBEventDispatcher class methodsFor:'documentation'!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
copyright
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
jv:libgdbs - GNU Debugger Interface Library
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
Copyright (C) 2015-now Jan Vrany
219
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
    37
Copyright (C) 2021 LabWare
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
This library is free software; you can redistribute it and/or
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
modify it under the terms of the GNU Lesser General Public
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
License as published by the Free Software Foundation; either
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
version 2.1 of the License. 
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
This library is distributed in the hope that it will be useful,
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
but WITHOUT ANY WARRANTY; without even the implied warranty of
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
Lesser General Public License for more details.
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
You should have received a copy of the GNU Lesser General Public
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
License along with this library; if not, write to the Free Software
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
! !
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
!GDBEventDispatcher class methodsFor:'instance creation'!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
new
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    "return an initialized instance"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    ^ self basicNew initialize.
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
! !
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
219
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
    63
!GDBEventDispatcher methodsFor:'accessing'!
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
    64
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
    65
process
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    66
    ^ thread
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    67
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    68
    "Modified: / 26-03-2021 / 13:43:40 / Jan Vrany <jan.vrany@labware.com>"
219
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
    69
! !
Jan Vrany <jan.vrany@labware.com>
parents: 218
diff changeset
    70
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    71
!GDBEventDispatcher methodsFor:'adding'!
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    72
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    73
pushEvent: aGDBEvent
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    74
    lock critical:[
230
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    75
        | index |
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    76
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    77
        Logger 
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    78
            log:('event loop: pushing %1 (%2)' bindWith:aGDBEvent class name
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    79
                    with:aGDBEvent token)
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    80
            severity:#trace
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    81
            facility:'GDB'
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    82
            originator:self
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    83
            attachment:aGDBEvent.
230
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    84
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    85
        "/ Sometimes, events are pushed back onto a queue as part of processing
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    86
        "/ command post-execute hook (this is mainly unify internal housekeeping
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    87
        "/ since GDB does not generate various events when state change is caused by
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    88
        "/ an MI command, see [1]).
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    89
        "/ 
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    90
        "/ In this case we want these artifical events to be processed within current
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    91
        "/ event set so internal data are in sync when `#send: ... andWait: true` returns.
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    92
        "/ 
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    93
        "/ [1]: https://sourceware.org/pipermail/gdb/2019-June/047938.html
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    94
        index := queue findFirst:[ :ev | ev isEventSetProcessingFinishedEvent ] ifNone: [queue size + 1].
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
    95
        queue add: aGDBEvent beforeIndex: index.
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    96
    ].
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
    97
    self start
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    98
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
    99
    "Created: / 02-06-2014 / 22:49:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   100
    "Modified: / 02-10-2018 / 14:30:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
230
ba4b57758e92 Change `#pushEvent:` to insert event into the current event set
Jan Vrany <jan.vrany@labware.com>
parents: 228
diff changeset
   101
    "Modified (comment): / 22-05-2021 / 16:49:54 / Jan Vrany <jan.vrany@labware.com>"
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   102
!
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   104
pushEventSet: aGDBEventSet
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   105
    lock critical:[
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   106
        queue add: (GDBEventSetProcessingStarted new setEventSet: aGDBEventSet).  
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   107
        queue addAll: aGDBEventSet.
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   108
        queue add: (GDBEventSetProcessingFinished new setEventSet: aGDBEventSet).
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   109
    ].
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   110
    self start.
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   112
    "Created: / 02-06-2014 / 22:42:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   113
    "Modified: / 02-10-2018 / 14:30:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   114
    "Modified (format): / 17-03-2021 / 12:33:01 / Jan Vrany <jan.vrany@labware.com>"
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   115
! !
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
!GDBEventDispatcher methodsFor:'initialization'!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
initialize
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    "Invoked when a new instance is created."
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    super initialize.
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   123
    queue := OrderedCollection new.
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   124
    lock := RecursionLock new.
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    "Modified: / 02-10-2018 / 14:13:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   127
    "Modified: / 17-03-2021 / 12:40:41 / Jan Vrany <jan.vrany@labware.com>"
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
setAnnouncer1: anAnnouncer
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    announcer1 := anAnnouncer
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    "Created: / 02-10-2018 / 14:21:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
setAnnouncer2: anAnnouncer
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    announcer2 := anAnnouncer
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    "Created: / 02-10-2018 / 14:21:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
221
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   142
setDebugger: aGDBDebugger
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   143
    debugger := aGDBDebugger
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   144
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   145
    "Created: / 09-03-2021 / 21:02:59 / Jan Vrany <jan.vrany@labware.com>"
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
! !
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
!GDBEventDispatcher methodsFor:'private'!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
221
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   150
dispatchEvent:aGDBEvent
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   151
    aGDBEvent debugger: debugger.
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
    TraceEvents ifTrue:[
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
        Logger 
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
            log:('event loop: broadcasting %1 (%2)' bindWith:aGDBEvent class name
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
                    with:aGDBEvent token)
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
            severity:#trace
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
            facility:'GDB'
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
            originator:self
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
            attachment:aGDBEvent
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
    ].
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
    announcer1 notNil ifTrue:[
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
        announcer1 announce:aGDBEvent.
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    ].
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    announcer2 notNil ifTrue:[
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
        announcer2 announce:aGDBEvent
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    ].
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
    "Created: / 02-06-2014 / 22:58:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    "Modified: / 02-10-2018 / 14:36:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
221
e7a1196c0c41 Make `GDBEvent` to hold on `GDBDebugger` that 'generated" that event
Jan Vrany <jan.vrany@labware.com>
parents: 219
diff changeset
   170
    "Modified: / 09-03-2021 / 21:03:21 / Jan Vrany <jan.vrany@labware.com>"
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   171
!
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   172
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   173
dispatchEvents
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   174
    "Dispatch all events the queue."
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   175
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   176
    | event |
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   177
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   178
    [
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   179
        event := nil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   180
        lock critical:[
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   181
            queue notEmpty ifTrue:[event := queue removeFirst]
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   182
        ].
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   183
        event notNil ifTrue:[
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   184
            self dispatchEvent: event
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   185
        ].
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   186
        event notNil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   187
    ] whileTrue.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   188
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   189
    "Created: / 26-03-2021 / 21:10:49 / Jan Vrany <jan.vrany@labware.com>"
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
! !
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
226
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   192
!GDBEventDispatcher methodsFor:'queries'!
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   193
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   194
hasPendingEvents
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   195
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   196
    "/ Note that there's no obligation for this information to
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   197
    "/ be 100% accurate, so no need for symchronization here.
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   198
    ^ queue notEmpty. 
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   199
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   200
    "Created: / 17-03-2021 / 12:36:16 / Jan Vrany <jan.vrany@labware.com>"
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   201
!
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   202
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   203
hasPendingEventsMatching: aBlock
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   204
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   205
    | anyCommandEventPending |
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   206
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   207
    "/ Here, synchronization is required since we iterate over
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   208
    "/ collection...
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   209
    lock critical:[
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   210
        anyCommandEventPending := queue anySatisfy: aBlock
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   211
    ].
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   212
    ^ anyCommandEventPending
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   213
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   214
    "Created: / 17-03-2021 / 12:37:58 / Jan Vrany <jan.vrany@labware.com>"
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   215
! !
f6c09fa9424e Move event queue into `GDBEventDispatcher` object
Jan Vrany <jan.vrany@labware.com>
parents: 221
diff changeset
   216
228
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   217
!GDBEventDispatcher methodsFor:'start & stop'!
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   218
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   219
start
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   220
    | t |
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   221
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   222
    self assert: queue notNil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   223
    self assert: lock notNil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   224
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   225
     ((t := thread) isNil or:[t isDead]) ifTrue:[
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   226
        thread := [
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   227
                self dispatchEvents.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   228
                thread := nil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   229
            ] newProcess.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   230
        thread name:('GDB Event dispatcher').
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   231
        "/thread priority:Processor userBackgroundPriority.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   232
        thread addExitAction:[
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   233
            thread := nil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   234
        ].
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   235
        thread resume.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   236
    ].
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   237
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   238
    "Created: / 02-10-2018 / 14:25:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   239
    "Modified (format): / 02-10-2018 / 16:34:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   240
    "Modified: / 26-03-2021 / 21:10:59 / Jan Vrany <jan.vrany@labware.com>"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   241
!
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   242
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   243
wait
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   244
    "Wait until all events are processed"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   245
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   246
    | t |
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   247
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   248
    (t := thread) isNil ifTrue:[^self].
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   249
    thread := nil.
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   250
    t isDead ifTrue: [ ^ self ].
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   251
    t priority:(Processor userSchedulingPriority + 1).
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   252
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   253
    "Created: / 02-10-2018 / 14:25:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   254
    "Modified: / 26-03-2021 / 14:17:11 / Jan Vrany <jan.vrany@labware.com>"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   255
    "Modified (comment): / 26-03-2021 / 21:01:30 / Jan Vrany <jan.vrany@labware.com>"
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   256
! !
04ce643219ce Start event loop process on demand
Jan Vrany <jan.vrany@labware.com>
parents: 226
diff changeset
   257
218
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
!GDBEventDispatcher class methodsFor:'documentation'!
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
version_HG
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    ^ '$Changeset: <not expanded> $'
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
! !
42d5a8a5e14e Encapsulate event dispatch loop logic into single object - a `GDBEventDispatcher`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264