Process.st
author Claus Gittinger <cg@exept.de>
Fri, 04 Mar 2016 16:32:51 +0100
changeset 19292 be9b1c99ec11
parent 18189 e06ab6591712
child 19293 81e42b6626fb
permissions -rw-r--r--
#FEATURE class: Process added: #wrapStackSize #wrapStackSize:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
     1
"{ Encoding: utf8 }"
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     4
 COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
     5
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
    14
"{ Package: 'stx:libbasic' }"
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
    15
17407
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
    16
"{ NameSpace: Smalltalk }"
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
    17
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
Link subclass:#Process
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    19
	instanceVariableNames:'id lookupActivations lookupDisabled prio state startBlock name
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    20
		restartable interruptActions exitActions suspendSemaphore
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    21
		singleStepping emergencySignalHandler suspendActions creatorId
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    22
		processGroupId interruptsDisabled priorityRange
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    23
		exceptionHandlerSet processType environment'
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
    24
	classVariableNames:'TerminateSignal RestartSignal CaughtSignals'
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
    25
	poolDictionaries:''
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
    26
	category:'Kernel-Processes'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    27
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    28
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
    29
!Process class methodsFor:'documentation'!
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    30
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    31
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    32
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    33
 COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
    34
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    35
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    36
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    37
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    38
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    39
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    40
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    41
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    42
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    43
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    44
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    45
documentation
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    46
"
18189
e06ab6591712 hardcoding instvar offsets is VERY BAD (fix for Jan's lookup bug)
Claus Gittinger <cg@exept.de>
parents: 17544
diff changeset
    47
    WARNING: 
e06ab6591712 hardcoding instvar offsets is VERY BAD (fix for Jan's lookup bug)
Claus Gittinger <cg@exept.de>
parents: 17544
diff changeset
    48
	the offsets of the instance variables lookupActivations and lookupDisabled are known in the VM
e06ab6591712 hardcoding instvar offsets is VERY BAD (fix for Jan's lookup bug)
Claus Gittinger <cg@exept.de>
parents: 17544
diff changeset
    49
	do not remove them, and do not insert/remove instance variables before them
e06ab6591712 hardcoding instvar offsets is VERY BAD (fix for Jan's lookup bug)
Claus Gittinger <cg@exept.de>
parents: 17544
diff changeset
    50
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    51
    Instances of Process represent lightweight smalltalk processes
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    52
    (i.e. threads). These all run in a shared smalltalk/X address space,
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    53
    and can thus access and communicate via any objects.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    54
    Do not confuse these with (heavy-weight) unix processes, which are
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    55
    created differently, and do NOT run in the same address space.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    56
    Also notice, that heavy-weight process creation takes much longer.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    57
    (see OperatingSystemclass>>fork).
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    58
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    59
    Smalltalk processes do not nescessarily need to be implemented as native
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    60
    threads - it may, but the actual implementation depends on the underlying
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    61
    OS'S features. However, even if implemented as native thread, the ST/X
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    62
    kernel makes certain, that only one thread executes at a time (with certain,
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    63
    well-defined exceptions). The reason is that the reqiored locking in the
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    64
    runtime system would make things slower in most cases.
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    65
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    66
    Processes are typically created by sending #fork or #forkAt: to a block;
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    67
    the block creates a new process, defines itself as its startBlock,
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    68
    and (optionally) tells the Processor about the new process.
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    69
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    70
    Scheduling is done by Processor, which is the sole instance of ProcessorScheduler.
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    71
    In ST/X, the scheduling algorithms are fully implemented (and visible) on the
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    72
    smalltalk level - beside the threadSwitch primitive, there is virtually no VM
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    73
    support (i.e. it can be easily changed).
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    74
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    75
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    76
    Processes can be terminated either soft or via a hardTerminate.
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    77
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    78
    A soft terminate (see Process>>terminate) will raise a TerminationSignal
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    79
    in the process, which can be handled by the process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    80
    If no other handler was specified, the processes own handler
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    81
    (see Process>>start) will catch the signal and terminate the process.
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    82
    During this signal processing, normal unwind processing takes place,
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    83
    this means that with a soft terminate, all valueOnUnwind:/valueNowOrOnUnwind:
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    84
    cleanup blocks are evaluated.
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    85
    (so a process which has set up those blocks correctly does not have to
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    86
     care especially about cleanup in case of termination).
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2636
diff changeset
    87
    Other than that, the TerminateSignal can be caught for special cleanup or
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    88
    even to make the process continue execution.
4415
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
    89
    If the process is suspended at termination time, it will be resumed
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    90
    in order to perform its cleanup actions (i.e. the cleanup is always
4415
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
    91
    done in the context of the terminating process itself).
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    92
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    93
    A hard terminate (Process>>terminateNoSignal) will NOT do all of the above,
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    94
    but quickly (and without any cleanup) terminate the process.
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    95
    The debugger offers a quickTerminate option on its popupMenu for
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    96
    situations, when soft termination fails. (for example, if some error was
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    97
    coded into a handler or unwind block).
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    98
4415
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
    99
    Leaving the processes startBlock has the same effct as a soft-terminate
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
   100
    (i.e. there is no need to send an explicit terminate).
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
   101
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   102
    Notice:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   103
	in Smalltalk/X, processes are gone, when an image is restarted;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   104
	this means, that you have to take care of process re-creation yourself.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   105
	Usually, this is done by depending on ObjectMemory, recreating the
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   106
	process(es) when the #returnFromSnapshot-change notifiction arrives.
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   107
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   108
	All views (actually windowGroups) recreate their window process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   109
	on image-restart. You have to do so manually for your own processes.
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   110
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   111
    A later version will allow specification of automatic restart, but
13563
a82e5ddf671a changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 13398
diff changeset
   112
    that's not yet implemented. However, even when implemented, restartable processes
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   113
    will be recreated to restart from the beginning. It will not be possible to
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   114
    automatically continue a processes execution where it left off.
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   115
    This is a consequence of the portable implementation of ST/X, since in order to
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   116
    implement process continuation, the machines stack had to be preserved and
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   117
    recreated.  Although this is possible to do (and actually not too complicated),
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   118
    this has not been implemented, since the machines stack layout is highly machine/compiler
375
claus
parents: 359
diff changeset
   119
    dependent, thus leading to much bigger porting effort of ST/X (which conflicts
claus
parents: 359
diff changeset
   120
    with ST/X's design goal of being highly portable).
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   121
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   122
    Process synchronization:
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   123
	Synchronization with cooperating processes is supported as usual,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   124
	via Semaphores (see Semaphore, Delay, SharedQueue etc.)
375
claus
parents: 359
diff changeset
   125
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   126
	With uncooperative processes, only synchronization on suspend
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   127
	and termination is possible:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   128
	  any other process can wait for a process to suspend or terminate.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   129
	  This waiting is implemented by using suspendSemaphore and exitBlocks
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   130
	  (where an exitSemaphore is signalled).
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   131
	  See waitUntilSuspended / waitUntilTerminated.
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   132
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   133
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   134
    Process states:
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   135
	#dead           process has (been) terminated;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   136
			the process instance has no underlting
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   137
			thread.
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   138
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   139
	#run            the process is willing to run,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   140
			but not active (i.e. another higher prio
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   141
			process is currently executing)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   142
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   143
	#active         the process is the current process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   144
			(there is only one)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   145
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   146
	#ioWait         waiting on some io-related semaphore
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   147
			(typically in #readWait / #writeWait)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   148
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   149
	#eventWait      waiting on some GUI event
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   150
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   151
	#timeWait       waiting on a timer-related semaphore
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   152
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   153
	#wait           waiting on some (other) semaphore
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   154
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   155
	#suspended      stopped from execution; however, an interrupt
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   156
			will return it into the run state.
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   157
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   158
	#stopped        stopped from execution; an interrupt will
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   159
			NOT return it into the run state (for debugging)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   160
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   161
	#debug          debugger sitting on top of the processes
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   162
			stack.
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   163
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   164
    Win32 only:
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   165
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   166
	#osWait         waiting on an OS-API call to finish.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   167
			can be interrupted, terminated and aborted
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   168
			(i.e. the usual context actions are is possible).
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   169
16563
Claus Gittinger <cg@exept.de>
parents: 16562
diff changeset
   170
	#halted         thread was caught while in a blocking API call
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   171
			or primitive endless loop and has been halted by
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   172
			the scheduler.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   173
			Can only be resumed or hard-terminated - abort
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   174
			or soft terminate or unwind actions are not possible.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   175
			(due to win32 limitations)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   176
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   177
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   178
    [Instance variables:]
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   179
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   180
	id                     <SmallInteger>   a unique process-id
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   181
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   182
	creatorId              <SmallInteger>   the id of the process that
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   183
						created me (useful for debugging
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   184
						or monitoring).
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
   185
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   186
	processGroupId                          usually the id of the creator,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   187
						unless the process detached from
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   188
						the group and became a groupLeader.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   189
						Groups can be easily terminated
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   190
						as a whole.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   191
						Group leaders have a groupId of nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   192
						A groupId of 0 (zero) marks a system
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   193
						process; these do not prevent a standAlone
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   194
						app from exiting.
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
   195
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   196
	prio                   <SmallInteger>   the processes priority
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   197
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   198
	priorityRange          <Interval>       the processes dynamic priority range
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   199
						(or nil)
3723
141777110a64 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3679
diff changeset
   200
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   201
	state                  <Symbol>         the processes state
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   202
						(for process-monitor)
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   203
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   204
	startBlock             <Block>          the startup-block (the one that forked)
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   205
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   206
	name                   <String-or-nil>  the processes name (if any)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   207
						(for process-monitor)
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   208
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   209
	suspendSemaphore       <Semaphore>      triggered when suspend (if nonNil)
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   210
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   211
	restartable            <Boolean>        is restartable; if true, the process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   212
						will be restarted when an image is
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   213
						restarted. Otherwise, it remains dead.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   214
						Running processes cannot be continued
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   215
						at the point where leftOff after an
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   216
						image-restart.
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   217
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   218
	interruptActions       <Collection>     interrupt actions as defined by interruptWith:,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   219
						performed at interrupt time
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   220
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   221
	exitActions            <Collection of Block>
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   222
						additional cleanup actions to perform
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   223
						on termination (if nonEmpty)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   224
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   225
	emergencySignalHandler <Block>          can be used for per-process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   226
						emergency signal handling
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   227
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   228
	interruptsDisabled     <Boolean>        flag if interrupts (as installed
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   229
						via #interruptWith:) are currently
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   230
						disabled. (i.e. on-hold).
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   231
						Interrupts will be delivered when
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   232
						reenabled.
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   233
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   234
	exceptionHandlerSet    <ExceptionhandlerSet>
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   235
						Handled by any process; allows for
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   236
						exceptionHandlers and query-answerers to
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   237
						be added/removed dynamically.
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   238
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   239
    [Class variables:]
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   240
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   241
	TerminateSignal         <Signal>        signal used to terminate processes
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   242
						(should not be caught - or at least
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   243
						 rejected in handlers).
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   244
						If caught and proceeded, a process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   245
						cannot be terminated via #terminate.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   246
						For hardTermination (in case of emergency),
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   247
						send it a #erminateNoSignal message.
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
   248
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   249
	RestartSignal           <Signal>        signal used to restart a process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   250
						Can be caught in additional handler(s),
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   251
						to perform all kind of re-initialization.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   252
						However, these handlers should reject,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   253
						for the restart to be really performed.
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   254
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   255
    [see also:]
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   256
	ProcessorScheduler
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   257
	Block
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   258
	Sempahore SemaphoreSet Delay SharedQueue
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   259
	WindowGroup
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   260
	(``Working with processes'': programming/processes.html)
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   261
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   262
    [author:]
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   263
	Claus Gittinger
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   264
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   265
"
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   266
!
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   267
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   268
examples
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   269
"
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   270
    start a background process, computing 1000 factorial 100 times;
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   271
    the processes priority is set to not disturb any interactive process.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   272
    Since its prio is higher than the 3D animation demos prio, you will notice,
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   273
    that those are suspended while the computation runs. But Interactive views
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   274
    (like browsers) will continue to react normal.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   275
									[exBegin]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   276
    [
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   277
       'starting' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   278
       100 timesRepeat:[1000 factorial].
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   279
       'done with factorial' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   280
    ] forkAt:(Processor userBackgroundPriority).
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   281
									[exEnd]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   282
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   283
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   284
    start a background process, computing 1000 factorial 100 times;
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   285
    the processes priority is set to not disturb any process.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   286
    The prio is set to 1 (which is the lowest possible) notice that now,
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   287
    the 3D animation demos also continue to run.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   288
									[exBegin]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   289
    [
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   290
       'starting' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   291
       100 timesRepeat:[1000 factorial].
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   292
       'done with factorial' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   293
    ] forkAt:1.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   294
									[exEnd]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   295
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   296
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   297
    start a background process, reading a pipe without blocking other
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   298
    processes;
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   299
									[exBegin]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   300
    [
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   301
       |p|
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   302
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   303
       'starting' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   304
       p := PipeStream readingFrom:'ls -lR .'.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   305
       [p atEnd] whileFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   306
	   p readWait.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   307
	   p nextLine printNL.
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   308
       ].
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   309
       p close.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   310
       'done with pipe' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   311
    ] forkAt:1.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   312
									[exEnd]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   313
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   314
    see more examples in doc/coding
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   315
    (or search in the browser for senders of fork*)
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   316
"
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   317
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   318
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   319
!Process class methodsFor:'initialization'!
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   320
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   321
initialize
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   322
    TerminateSignal isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   323
	TerminateSignal := TerminateProcessRequest.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   324
	TerminateSignal notifierString:'unhandled process termination'.
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   325
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   326
	RestartSignal := RestartProcessRequest.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   327
	RestartSignal notifierString:'unhandled process restart'.
302
1f76060d58a4 *** empty log message ***
claus
parents: 252
diff changeset
   328
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   329
	CaughtSignals := SignalSet
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   330
			    with:AbortAllOperationRequest
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   331
			    with:TerminateProcessRequest
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   332
			    with:RestartProcessRequest.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   333
    ]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   334
6212
65624195f937 exceptions now class-based
Claus Gittinger <cg@exept.de>
parents: 6204
diff changeset
   335
    "Modified: / 17.11.2001 / 11:07:29 / cg"
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   336
! !
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   337
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   338
!Process class methodsFor:'instance creation'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   339
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   340
for:aBlock priority:aPrio
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   341
    "create a new (unscheduled) process which will execute aBlock at
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   342
     a given priority, once scheduled. The process will start execution once
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   343
     it gets a #resume-message."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   344
2268
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   345
    ^ self basicNew for:aBlock priority:aPrio
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   346
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   347
    "Modified: 25.1.1997 / 01:23:12 / cg"
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   348
!
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   349
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   350
new
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   351
    "create a new (unscheduled) process which will execute the start
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   352
     method, when scheduled. The process will start execution once
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   353
     it gets a #resume-message."
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   354
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   355
    ^ self basicNew for:nil priority:(Processor activePriority).
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   356
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   357
    "Created: 25.1.1997 / 01:31:05 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   358
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   359
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   360
!Process class methodsFor:'Signal constants'!
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   361
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   362
restartSignal
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   363
    "return the signal used for process restart"
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   364
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   365
    ^ RestartSignal
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   366
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   367
    "Created: 28.10.1996 / 20:26:50 / cg"
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   368
!
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   369
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   370
terminateSignal
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   371
    "return the signal used for process termination"
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   372
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   373
    ^ TerminateSignal
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   374
! !
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   375
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   376
!Process class methodsFor:'defaults'!
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   377
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   378
defaultMaximumStackSize
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   379
    "return the default max stack size. All new processes get
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   380
     this limit initially.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   381
     It may be changed for individual processes with:
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   382
	aProcess setMaximumStackSize:limit"
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   383
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   384
%{  /* NOCONTEXT */
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   385
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
   386
    RETURN ( __mkSmallInteger( __defaultThreadMaxStackSize() ));
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   387
%}
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   388
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   389
    "
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   390
     Process defaultMaximumStackSize
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   391
    "
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   392
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   393
    "Modified: 8.5.1996 / 10:22:24 / cg"
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   394
!
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   395
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   396
defaultMaximumStackSize:numberOfBytes
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   397
    "set the default max stack size, return the previous value.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   398
     All new processes get this stack limit initially.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   399
     It may be changed for individual processes with:
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   400
	aProcess setMaximumStackSize:limit
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   401
     Notice:
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   402
	There is seldom any need to change the default setting,
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   403
	except for highly recursive programs."
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   404
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   405
%{  /* NOCONTEXT */
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   406
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   407
    if (__isSmallInteger(numberOfBytes)) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
   408
	RETURN ( __mkSmallInteger(__threadSetDefaultMaxStackSize(__intVal(numberOfBytes)) ));
1352
Claus Gittinger <cg@exept.de>
parents: 1346
diff changeset
   409
    }
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   410
%}
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   411
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   412
    "
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   413
     Process defaultMaximumStackSize:500*1024
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   414
    "
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   415
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   416
    "Modified: 8.5.1996 / 10:23:26 / cg"
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   417
!
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   418
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   419
wrapStackSize
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   420
    "return the wrap stack size. 
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   421
     Under windows, blocking API calls are executed on a separate stack with this size.
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   422
     If you ever encounter that a call to n external library function requires more stack than
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   423
     this, you may change this size in your startup (or programmatically) during early startup.
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   424
     Returns nil on non-windows machines."
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   425
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   426
%{  /* NOCONTEXT */
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   427
    INT sz = 0;
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   428
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   429
#ifdef WIN32
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   430
    extern INT __getWrapStackSize();
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   431
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   432
    sz = __getWrapStackSize();
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   433
#endif
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   434
    RETURN (__mkInt(sz));
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   435
%}
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   436
!
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   437
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   438
wrapStackSize:newSize
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   439
    "set the wrap stack size. 
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   440
     Under windows, blocking API calls are executed on a separate stack with this size.
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   441
     If you ever encounter that a call to n external library function requires more stack than
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   442
     this, you may change this size in your startup (or programmatically) during early startup.
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   443
     An argument of 0 changes the size back to the default.
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   444
     Returns the previous size."
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   445
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   446
%{  /* NOCONTEXT */
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   447
    INT __oldSize = 0;
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   448
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   449
    if (__isSmallInteger(newSize)) {
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   450
        INT __newSize = __intVal(newSize);
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   451
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   452
        if (__newSize >= 0) {
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   453
#ifdef WIN32
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   454
            extern INT __setWrapStackSize(INT);
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   455
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   456
            __oldSize = __setWrapStackSize(__newSize);
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   457
#endif
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   458
        }
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   459
    }
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   460
    RETURN (__mkInt(__oldSize));
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   461
%}
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   462
! !
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   463
3783
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   464
!Process class methodsFor:'instance retrieval'!
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   465
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   466
findProcessWithId:id
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   467
    "return a process with a particular id.
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   468
     This is only a debugging helper, to allow
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   469
     easy access of a process by name in the MiniDebugger"
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   470
9226
81391c5bf4a2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9085
diff changeset
   471
    ^ self allSubInstances detect:[:aProcess | aProcess id = id] ifNone:nil.
3783
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   472
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   473
    "
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   474
     Process findProcessWithId:1
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   475
    "
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   476
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   477
    "Modified: / 26.8.1998 / 15:39:55 / cg"
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   478
!
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   479
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   480
findProcessWithName:name
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   481
    "return a process with a particular name.
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   482
     This is only a debugging helper, to allow
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   483
     easy access of a process by name in the MiniDebugger"
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   484
9226
81391c5bf4a2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9085
diff changeset
   485
    ^ self allSubInstances detect:[:aProcess | aProcess name = name] ifNone:nil.
3783
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   486
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   487
    "
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   488
     Process findProcessWithName:'scheduler'
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   489
    "
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   490
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   491
    "Modified: / 26.8.1998 / 15:40:54 / cg"
9008
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   492
!
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   493
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   494
findProcessesWithGroupId:aGroupId
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   495
    "return a collection of processes with the particular group id.
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   496
    "
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   497
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   498
    ^ self allSubInstances select:[:aProcess | aProcess processGroupId = aGroupId ].
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   499
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   500
    "
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   501
     Process findProcessesWithGroupId: 0
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   502
    "
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   503
c4d718e416f1 find all process of the same id, used to suspend all of a group.
ab
parents: 8913
diff changeset
   504
    "Modified: / 26.8.1998 / 15:40:54 / cg"
3783
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   505
! !
5ac905a9a8c0 added process-retrievers (for MiniDebugger)
Claus Gittinger <cg@exept.de>
parents: 3776
diff changeset
   506
16182
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   507
!Process methodsFor:'Compatibility-Squeak'!
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   508
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   509
isTerminated
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   510
    "return true, if the receiver is a dead process"
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   511
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   512
    ^ self isDead
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   513
! !
44e2baa0f9b8 class: Process
Claus Gittinger <cg@exept.de>
parents: 16047
diff changeset
   514
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7257
diff changeset
   515
!Process methodsFor:'Compatibility-V''Age'!
1980
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   516
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   517
queueInterrupt:aBlock
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   518
    "VisualAge compatibility: alias for #interruptWith:
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   519
     arrange for the receiver process to be interrupted and
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   520
     evaluate aBlock in its interrupt handler."
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   521
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   522
    ^ self interruptWith:aBlock
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   523
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   524
    "Created: 15.11.1996 / 11:41:06 / cg"
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   525
! !
173122fed8e2 added V'Age compatibility method
Claus Gittinger <cg@exept.de>
parents: 1946
diff changeset
   526
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   527
!Process methodsFor:'accessing'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   528
4874
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   529
beGUIProcess
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   530
    "mark the receiver as a gui process.
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   531
     This is currently not used, but allows end-user applications
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   532
     to terminate all subprocesses which are GUI related, and leave
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   533
     other background processes in the same process group untouched."
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   534
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   535
    processType := #gui
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   536
!
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
   537
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   538
beGroupLeader
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   539
    "make the receiver a processGroupLeader.
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   540
     This detaches the process from its creator, so that it will not
10742
186b8a15cad6 comment
Claus Gittinger <cg@exept.de>
parents: 10553
diff changeset
   541
     be terminated when it terminates via #terminateGroup.
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   542
     Also, processes forked from a groupLeader belong to that group
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   543
     and can be terminated via #terminateGroup - unless they become
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   544
     group leaders themself.
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   545
     (windowgroup processes do this)."
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   546
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   547
    processGroupId := id
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   548
10742
186b8a15cad6 comment
Claus Gittinger <cg@exept.de>
parents: 10553
diff changeset
   549
    "Created: / 08-07-1996 / 14:08:44 / cg"
186b8a15cad6 comment
Claus Gittinger <cg@exept.de>
parents: 10553
diff changeset
   550
    "Modified: / 17-10-2007 / 10:49:09 / cg"
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   551
!
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
   552
2196
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   553
beSystemProcess
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   554
    "make the receiver a system process.
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   555
     These processes have a groupId of 0.
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   556
     When executed as standAlone application, smalltalk exits when
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   557
     no more user processes are running.
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   558
     (i.e. when there are only systemProcesses left)
2196
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   559
     To prevent any daemon processes from preventing this exit,
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   560
     you should make them systemProcesses"
2196
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   561
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   562
    processGroupId := 0
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   563
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   564
    "Created: 17.1.1997 / 21:42:46 / cg"
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   565
!
8ae161b98239 added #beSystemProcess
Claus Gittinger <cg@exept.de>
parents: 2158
diff changeset
   566
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   567
changePriority:aNumber
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   568
    "same as priority:, but returns the old priority.
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   569
     (cannot do this in #priority: for ST-80 compatibility)"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   570
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   571
    |oldPrio|
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   572
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   573
    oldPrio := prio.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   574
    Processor changePriority:aNumber for:self.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   575
    ^ oldPrio
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   576
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   577
    "Modified: 23.12.1995 / 18:38:53 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   578
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   579
1530
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   580
creatorId
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   581
    "return the processcreators id.
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   582
     This has no semantic meaning, but is useful to identify processes
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   583
     when debugging."
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   584
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   585
    ^ creatorId
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   586
!
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   587
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   588
exceptionHandlerSet
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   589
    "retrieve the exceptionHandlerSet, which includes the set of
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   590
     exceptionHandlers which are caught by the process.
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   591
     Initially being empty, this allows for default handlers to be
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   592
     dynamically added/removed from the set of handled exceptions/queries."
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   593
4877
e9c91ce4a6e3 exceptionHandlerSet creation
ca
parents: 4875
diff changeset
   594
    exceptionHandlerSet isNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   595
	exceptionHandlerSet := ExceptionHandlerSet new.
4877
e9c91ce4a6e3 exceptionHandlerSet creation
ca
parents: 4875
diff changeset
   596
    ].
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   597
    ^ exceptionHandlerSet
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   598
!
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   599
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   600
id
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   601
    "return the processes id"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   602
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   603
    ^ id
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   604
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   605
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   606
name
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   607
    "return the processes name"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   608
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   609
    ^ name
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   610
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   611
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   612
name:aString
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   613
    "set the processes name"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   614
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   615
    name := aString
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   616
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   617
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   618
priority
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   619
    "return the receivers priority"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   620
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   621
    ^ prio
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   622
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   623
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   624
priority:aNumber
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   625
    "set my priority"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   626
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   627
    Processor changePriority:aNumber for:self.
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   628
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   629
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   630
priorityRange
3723
141777110a64 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3679
diff changeset
   631
    "return my dynamic priority range"
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   632
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   633
    ^ priorityRange
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   634
3723
141777110a64 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3679
diff changeset
   635
    "Modified: / 3.8.1998 / 22:55:53 / cg"
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   636
!
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   637
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   638
priorityRange:anInterval
3723
141777110a64 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3679
diff changeset
   639
    "change my dynamic priority range"
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   640
16421
b787a8bd318b class: Process
Claus Gittinger <cg@exept.de>
parents: 16312
diff changeset
   641
    |lowPri hiPri newPrio|
9084
f8b30a6104b4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9059
diff changeset
   642
f8b30a6104b4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9059
diff changeset
   643
    priorityRange := anInterval.
f8b30a6104b4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9059
diff changeset
   644
    anInterval notNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   645
	lowPri := priorityRange start.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   646
	hiPri := priorityRange stop.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   647
	(newPrio := prio) isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   648
	    newPrio := lowPri
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   649
	] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   650
	    prio < lowPri ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   651
		newPrio := lowPri
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   652
	    ] ifFalse:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   653
		prio > hiPri ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   654
		    newPrio := hiPri
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   655
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   656
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   657
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   658
	newPrio ~~ prio ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   659
	    self priority:newPrio
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   660
	]
9084
f8b30a6104b4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9059
diff changeset
   661
    ].
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   662
3723
141777110a64 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3679
diff changeset
   663
    "Modified: / 3.8.1998 / 22:56:05 / cg"
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   664
!
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
   665
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   666
processGroupId
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   667
    "return the processes processGroup id.
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   668
     Normally, when created, a processes creator id is taken and used
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   669
     as the processGroup id.
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   670
     When #terminateGroup is sent to a process, the process and all of its
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   671
     group members are terminated together.
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   672
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   673
     Processes can detach themself from the process group to prevent being
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   674
     killed when the parent terminates (windowgroup processes do this)."
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   675
1530
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   676
    ^ processGroupId
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   677
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   678
    "Created: 8.7.1996 / 13:47:47 / cg"
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   679
!
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   680
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   681
processGroupId:aGroupLeadersProcessID
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   682
    "set the processes processGroup id.
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   683
     Normally, when created, a processes creator id is taken and used
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   684
     as the processGroup id.
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   685
     When #terminateGroup is sent to a process, the process and all of its
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   686
     group members are terminated together.
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   687
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   688
     Processes can detach themself from the process group to prevent being
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   689
     killed when the parent terminates (windowgroup processes do this)."
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   690
1530
dfa58f01505c remember creating processes id - helpful when debugging
Claus Gittinger <cg@exept.de>
parents: 1529
diff changeset
   691
    processGroupId := aGroupLeadersProcessID
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   692
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   693
    "Created: 8.7.1996 / 13:47:53 / cg"
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   694
!
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
   695
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   696
restartable:aBoolean
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   697
    "set/clear, the restartable flag.
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   698
     Restartable processes will automatically be restarted by the
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   699
     ProcessorScheduler upon image restart.
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   700
     Others have to be restarted manually."
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   701
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   702
    startBlock isNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   703
	self error:'cannot be made restartable when already started' mayProceed:true.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   704
	^ self
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   705
    ].
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   706
    restartable := aBoolean
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   707
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   708
    "Modified: 23.12.1995 / 18:38:32 / cg"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   709
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   710
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   711
singleStep:aBoolean
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   712
    singleStepping := aBoolean
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   713
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   714
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   715
startBlock
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   716
    "return the processes startup-block"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   717
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   718
    ^ startBlock
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   719
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   720
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   721
state
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   722
    "return a symbol describing the processes state"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   723
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   724
    ^ state
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   725
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   726
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   727
state:aSymbol
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   728
    "set the state - only to be used from scheduler"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   729
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   730
    state := aSymbol
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   731
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   732
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   733
suspendedContext
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   734
    "return the processes suspended context
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   735
     - this is the context from which a process switch into the scheduler
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   736
     or another process occured.
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   737
     For the active process, a dead process, or one which
2888
3e8b5166d90f a rocess which had no chance yet to run, can be #terminated with
Claus Gittinger <cg@exept.de>
parents: 2857
diff changeset
   738
     had no chance to run yet, nil is returned.
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   739
     Typically, only the debugger is interested in this one."
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   740
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   741
%{  /* NOCONTEXT */
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   742
    OBJ i;
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   743
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   744
    if (__isSmallInteger(i = __INST(id))) {
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   745
	RETURN (__threadContext(__intVal(i)));
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   746
    }
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   747
%}.
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   748
    ^ nil
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   749
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   750
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   751
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   752
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   753
! !
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   754
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   755
!Process methodsFor:'accessing-change notifications'!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   756
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   757
addExitAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   758
    "add aBlock to the processes exit actions.
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   759
     This block will be evaluated right before the process dies,
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   760
     and can be used to trigger actions somewhere else (i.e. synchronization)."
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   761
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   762
    exitActions isNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   763
	exitActions := OrderedCollection new
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   764
    ].
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   765
    exitActions add:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   766
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   767
    "Created: 12.1.1997 / 00:34:51 / cg"
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   768
!
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   769
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   770
addSuspendAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   771
    "add aBlock to the processes suspend actions.
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   772
     This block will be evaluated when a process gets suspended.
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   773
     You may ask what that is useful for - it is useful to flush
5088
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   774
     buffered graphic commands of a GUI process (i.e. to force xlib
053e015a218a comments only
Claus Gittinger <cg@exept.de>
parents: 5087
diff changeset
   775
     to send buffered commands to the display)."
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   776
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   777
    suspendActions isNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   778
	suspendActions := OrderedCollection new
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   779
    ].
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   780
    suspendActions add:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   781
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   782
    "Modified: 13.12.1995 / 13:44:31 / stefan"
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   783
    "Created: 12.1.1997 / 00:35:11 / cg"
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   784
!
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   785
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   786
emergencySignalHandler
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   787
    "return the emergencySignalHandler block.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   788
     See Signal>>documentation for more info."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   789
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   790
    ^ emergencySignalHandler
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   791
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   792
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   793
emergencySignalHandler:aOneArgBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   794
    "set the emergencySignalHandler block.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   795
     See Signal>>documentation for more info."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   796
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   797
    emergencySignalHandler := aOneArgBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   798
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   799
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   800
removeAllExitActions
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   801
    "remove all exit actions."
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
   802
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   803
    exitActions := nil.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   804
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   805
    "Created: 12.1.1997 / 00:36:02 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   806
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   807
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   808
removeAllSuspendActions
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   809
    "remove all suspend actions."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   810
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   811
    suspendActions := nil.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   812
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   813
    "Created: 12.1.1997 / 00:36:16 / cg"
13016
sr
parents: 12764
diff changeset
   814
!
sr
parents: 12764
diff changeset
   815
sr
parents: 12764
diff changeset
   816
removeExitAction:anExitAction ifAbsent:exceptionBlock
sr
parents: 12764
diff changeset
   817
    "remove the identical exitAction; if found, remove and return it;
sr
parents: 12764
diff changeset
   818
    if not, return the value from evaluating exceptionBlock"
sr
parents: 12764
diff changeset
   819
sr
parents: 12764
diff changeset
   820
    exitActions notNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   821
	^ exitActions removeIdentical:anExitAction ifAbsent:exceptionBlock.
13016
sr
parents: 12764
diff changeset
   822
    ].
sr
parents: 12764
diff changeset
   823
    ^ exceptionBlock value.
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   824
! !
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   825
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
   826
!Process methodsFor:'accessing-stack'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   827
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   828
maximumStackSize
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   829
    "returns the processes stack limit - i.e. the process will be
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   830
     interrupted with a recursionSignal-raise, if it ever
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   831
     needs more stack (in bytes) than this number"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   832
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   833
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   834
    extern int __threadMaxStackSize();
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   835
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   836
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   837
    if (__isSmallInteger(i = __INST(id))) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
   838
	RETURN( __mkSmallInteger(__threadMaxStackSize(__intVal(i))) );
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   839
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   840
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   841
    ^ nil
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   842
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   843
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   844
setMaximumStackSize:limit
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   845
    "sets the processes stack limit - i.e. the process will be
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   846
     interrupted with a recursionSignal-raise, if it ever
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   847
     needs more stack (in bytes) than this number.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   848
     Returns the old value."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   849
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   850
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   851
    extern int __threadSetMaxStackSize();
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   852
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   853
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   854
    if (__isSmallInteger(i = __INST(id))
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   855
     && __isSmallInteger(limit) ) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
   856
	RETURN ( __mkSmallInteger(__threadSetMaxStackSize(__intVal(i), __intVal(limit))) );
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   857
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   858
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   859
    ^ nil
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   860
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   861
712
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   862
setStackInitialSize:initial increment:increment safe:safe
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   863
    "hook for fine-tuning. Sets the processes initialStackSize- and
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   864
     and stackIncrement-parameters. Not for normal use."
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   865
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   866
%{  /* NOCONTEXT */
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   867
    extern int __threadSetJunkSizes();
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   868
    OBJ i;
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   869
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   870
    if (__isSmallInteger(i = __INST(id))
712
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   871
     && __isSmallInteger(initial)
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   872
     && __isSmallInteger(increment)
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   873
     && __isSmallInteger(safe)) {
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   874
	RETURN ( __threadSetJunkSizes(__intVal(i), __intVal(initial), __intVal(increment), __intVal(safe)) ? true : false );
712
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   875
    }
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   876
%}.
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   877
    ^ false
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   878
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   879
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   880
!Process methodsFor:'interrupts'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   881
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   882
addInterruptAction:aBlock
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   883
    "make the receiver evaluate aBlock when resumed/interrupted.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   884
     The name is somewhat misleading (actually, its historic):
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   885
     the block is also evaluated on resume."
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   886
5490
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   887
    |wasBlocked|
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   888
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   889
    wasBlocked := OperatingSystem blockInterrupts.
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   890
    interruptActions isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   891
	interruptActions := OrderedCollection with:aBlock.
5490
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   892
    ] ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   893
	interruptActions addFirst:aBlock.
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   894
    ].
5490
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   895
    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   896
!
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   897
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   898
blockInterrupts
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   899
    "disable interrupt processing for the receiver process
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   900
     - if disabled, incoming interrupts will be registered and handled as
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   901
     soon as interrupts are reenabled via unblockInterrupts.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   902
     Returns the previous blocking status i.e. true if interrupts
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   903
     where already blocked. You need this information for proper
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   904
     unblocking, in case of nested block/unblock calls.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   905
     This is similar to OperatingSystem>>blockInterrupts, but only
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   906
     affects interrupts for the receiver process
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   907
     (i.e. those which are installed via #interruptWith:)"
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   908
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   909
    |disabledBefore|
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   910
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   911
    disabledBefore := interruptsDisabled.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   912
    interruptsDisabled := true.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   913
    ^ disabledBefore ? false
2726
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   914
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   915
    "
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   916
     |p1|
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   917
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   918
     p1 := [
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   919
	     Transcript showCR:'disabled ...'.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   920
	     Transcript showCR:Processor activeProcess blockInterrupts.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   921
	     Transcript showCR:'busy ...'.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   922
	     Delay waitForSeconds:10.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   923
	     Transcript showCR:'enabled ...'.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   924
	     Processor activeProcess unblockInterrupts.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   925
	   ] forkAt:9.
2726
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   926
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   927
     p1 interruptWith:[Transcript showCR:'interrupted'].
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   928
    "
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   929
!
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   930
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   931
evaluateInterruptActionsWithContext:aContext
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   932
    "evaluate my interrupt-actions."
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   933
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   934
    |action wasBlocked|
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   935
8544
732ed0a3d7ca use #~~ instead of #> for speed
Stefan Vogel <sv@exept.de>
parents: 8495
diff changeset
   936
    [interruptActions size ~~ 0] whileTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   937
	wasBlocked := OperatingSystem blockInterrupts.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   938
	action := interruptActions removeFirst.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   939
	interruptActions size == 0 ifTrue:[ interruptActions := nil ].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   940
	wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   941
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   942
	action valueWithOptionalArgument:aContext
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   943
    ].
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   944
!
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   945
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   946
forceInterruptOnReturnOf:aContext
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   947
    "helper entry for debugger. Force a stepInterrupt whenever aContext
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   948
     returns either directly or via an unwind."
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   949
1728
827231681803 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1531
diff changeset
   950
    aContext markForInterruptOnUnwind.
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   951
%{
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   952
    OBJ i;
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   953
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   954
    if (__isSmallInteger(i = __INST(id))) {
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   955
	__threadContextStepInterrupt(__intVal(i), 1);
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   956
    }
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   957
%}
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   958
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   959
!
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   960
5491
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   961
hasInterruptActions
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   962
    "return true, if there are any interrupt actions to evaluate
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   963
     (i.e. if the receiver has been interrupted)."
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   964
8544
732ed0a3d7ca use #~~ instead of #> for speed
Stefan Vogel <sv@exept.de>
parents: 8495
diff changeset
   965
    ^ interruptActions size ~~ 0
5491
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   966
!
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   967
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   968
interrupt
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   969
    "evaluate my interrupt-actions.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   970
     The process will go back to where it got interrupted
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   971
     after doing this."
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   972
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   973
    self evaluateInterruptActionsWithContext:thisContext sender
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   974
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   975
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   976
interruptWith:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   977
    "interrupt the receiver and make it evaluate aBlock.
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   978
     If the receiver is currently suspended it is resumed.
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   979
     Notice, that the process will only perform the block immediately,
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   980
     IFF its priority is higher than the current processes priority.
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   981
     Otherwise, it will remain suspended, until its time comes."
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   982
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   983
    Processor activeProcess == self ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   984
	aBlock value
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   985
    ] ifFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   986
	self addInterruptAction:aBlock.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   987
	Processor scheduleForInterrupt:self.
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   988
    ]
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   989
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   990
    "Modified: 12.1.1997 / 00:52:05 / cg"
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   991
!
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   992
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   993
interruptedIn:aContext
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   994
    "evaluate my interrupt-actions.
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   995
     This is indirectly called by the VM, when some #interruptWith: action
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   996
     was scheduled for the process, and the process is resumed.
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   997
     The process will go back to where it got interrupted after doing this."
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   998
2727
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
   999
    "/ the returned value here has a subtle effect:
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1000
    "/ if false, the interrupt is assumed to be not taken,
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1001
    "/ and will be redelivered.
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1002
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
  1003
    interruptsDisabled == true ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1004
	"/ no, I dont want interrupts right now;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1005
	"/ try again later.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1006
	^ false
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
  1007
    ].
8613
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1008
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1009
    "/ I tend to disable interrupts, while processing interrupt actions;
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1010
    "/ however, this leads to a blocking Debugger sometimes (scroll).
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1011
"/    [
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1012
"/        interruptsDisabled := true.
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1013
	self evaluateInterruptActionsWithContext:aContext.
8613
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1014
"/    ] ensure:[
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1015
"/        interruptsDisabled := false.
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1016
"/    ].
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
  1017
    ^ true
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  1018
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  1019
    "Created: 18.10.1996 / 20:43:39 / cg"
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  1020
    "Modified: 18.10.1996 / 20:47:20 / cg"
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1021
!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1022
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1023
onResumeDo:aBlock
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1024
    "prepare for the receiver to evaluate aBlock when resumed.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1025
     This is like #interruptWith:, but does not resume the receiver
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1026
     (i.e. it continues its sleep).
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1027
     This is useful to place a breakpoint on a sleeping process, to be fired
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1028
     when it awakes."
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1029
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1030
    self addInterruptAction:aBlock.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1031
    Processor scheduleInterruptActionsOf:self.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1032
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1033
    "Created: 5.3.1996 / 17:28:04 / cg"
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1034
    "Modified: 8.3.1996 / 13:01:21 / cg"
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1035
!
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1036
2857
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1037
stepInterruptHandler:anObject
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1038
    "set the handler for stepInterrupts occurring in the receiver process.
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1039
     This is an interface for the debugger and allows it to monitor a threads
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1040
     stepInterrupts. Returns the previous handler.
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1041
     Not for general use."
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1042
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1043
%{  /* NOCONTEXT */
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1044
    extern OBJ __threadStepInterruptHandler();
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1045
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1046
    RETURN( __threadStepInterruptHandler(anObject) );
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1047
%}
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1048
!
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1049
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1050
unblockInterrupts
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1051
    "enable interrupt processing for the receiver process
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1052
     - if any interrupts are pending, these will be handled immediately.
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1053
     When unblocking interrupts, take care of nested block/unblock
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1054
     calls - you should only unblock after a blockcall if they where
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1055
     really not blocked before.
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1056
     This is similar to OperatingSystem>>unblockInterrupts, but only
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1057
     affects interrupts for the receiver process
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1058
     (i.e. those which are installed via #interruptWith:)"
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1059
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1060
    interruptsDisabled := false.
8544
732ed0a3d7ca use #~~ instead of #> for speed
Stefan Vogel <sv@exept.de>
parents: 8495
diff changeset
  1061
    interruptActions size ~~ 0 ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1062
	Processor activeProcess == self ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1063
	    self interrupt
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1064
	]
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1065
    ]
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1066
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1067
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1068
!Process methodsFor:'monitoring'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1069
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1070
numberOfStackBoundaryHits
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1071
    "internal monitoring only - will vanish"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1072
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1073
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1074
    extern int __threadNumberOfStackBoundaryHits();
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1075
    int n;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1076
    OBJ i;
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1077
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1078
    if (__isSmallInteger(i = __INST(id))) {
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1079
	n = __threadNumberOfStackBoundaryHits(__intVal(i));
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1080
	n &= _MAX_INT;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1081
	RETURN( __mkSmallInteger(n) );
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1082
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1083
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1084
    ^ nil
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1085
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1086
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1087
numberOfStackSegments
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1088
    "return the processes number of stack segments currently used.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1089
     This method is for monitoring purposes only - it may vanish."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1090
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1091
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1092
    extern int __threadTotalStackSize();
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1093
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1094
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1095
    if (__isSmallInteger(i = __INST(id))) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
  1096
	RETURN( __mkSmallInteger((INT)__threadStackSegments(__intVal(i))) );
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1097
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1098
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1099
    ^ nil
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1100
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1101
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1102
totalStackSize
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1103
    "return the processes maximum used stack size.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1104
     This method is for monitoring purposes only - it may vanish."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1105
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1106
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1107
    extern int __threadTotalStackSize();
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1108
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1109
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1110
    if (__isSmallInteger(i = __INST(id))) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
  1111
	RETURN( __mkSmallInteger(__threadTotalStackSize(__intVal(i))) );
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1112
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1113
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1114
    ^ nil
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1115
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1116
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1117
usedStackSize
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1118
    "Return the processes current stack size.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1119
     This method is for monitoring purposes only - it may vanish."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1120
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1121
%{  /* NOCONTEXT */
14724
03fbc7b1d07e 64bit fix
Claus Gittinger <cg@exept.de>
parents: 14722
diff changeset
  1122
    extern unsigned INT __threadUsedStackSize();
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1123
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1124
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1125
    if (__isSmallInteger(i = __INST(id))) {
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
  1126
	RETURN( __mkSmallInteger(__threadUsedStackSize(__intVal(i))) );
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1127
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1128
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1129
    ^ nil
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1130
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1131
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1132
vmTrace:aBoolean
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1133
    "turn on/off VM message tracing for the receiver.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1134
     This is meant for ST/X debugging, and may vanish.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1135
     Expect lots of output, once this is turned on."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1136
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1137
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1138
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1139
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1140
    if (__isSmallInteger(i = __INST(id))) {
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1141
	__threadTracing(__intVal(i), aBoolean);
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1142
    }
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1143
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1144
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1145
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1146
!Process methodsFor:'obsolete'!
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1147
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1148
exitAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1149
    "Obsoleted by addExitAction: / removeAllExitActions.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1150
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1151
     Add aBlock to the processes exit actions.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1152
     This block will be evaluated right before the process dies.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1153
     An argument of nil removes all exitActions."
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1154
5870
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1155
    <resource:#obsolete>
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1156
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1157
    self obsoleteMethodWarning:'use addExitAction: / removeAllExitActions'.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1159
    aBlock isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1160
	^ self removeAllExitActions.
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1161
    ].
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1162
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1163
    ^ self addExitAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1164
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1165
    "Modified: 13.12.1995 / 13:44:03 / stefan"
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1166
    "Modified: 12.1.1997 / 00:39:59 / cg"
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1167
!
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1168
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1169
suspendAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1170
    "Obsoleted by addSuspendAction: / removeAllSuspendActions.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1171
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1172
     Add aBlock to the processes suspend actions.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1173
     This block will be evaluated when a process gets suspended.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1174
     A nil argument removes all suspendActions."
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1175
5870
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1176
    <resource:#obsolete>
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1177
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1178
    self obsoleteMethodWarning:'use addSuspendAction: / removeAllSuspendActions'.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1179
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1180
    aBlock isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1181
	^ self removeAllSuspendActions.
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1182
    ].
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1183
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1184
    ^ self addSuspendAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1185
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1186
    "Modified: 12.1.1997 / 00:38:22 / cg"
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1187
!
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1188
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1189
terminateAllSubprocesses
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1190
    <resource:#obsolete>
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1191
    self obsoleteMethodWarning:'use #terminateAllSubprocessesInGroup'.
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1192
    self terminateAllSubprocessesInGroup.
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1193
!
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1194
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1195
terminateWithAllSubprocesses
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1196
    <resource:#obsolete>
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1197
    self obsoleteMethodWarning:'use #terminateWithAllSubprocessesInGroup'.
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1198
    self terminateWithAllSubprocessesInGroup.
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1199
! !
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1200
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1201
!Process methodsFor:'printing & storing'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1202
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1203
printOn:aStream
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1204
    "a little more info in my printed representation"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1205
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1206
    aStream nextPutAll:state article;
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1207
	    space;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1208
	    nextPutAll:state;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1209
	    nextPutAll:' Process (';
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1210
	    nextPutAll:self nameOrId.
6944
491b35cf0bf3 printString changed to include id
Claus Gittinger <cg@exept.de>
parents: 6784
diff changeset
  1211
    name notNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1212
	aStream
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1213
	    nextPutAll:', id=';
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1214
	    nextPutAll:id printString.
6944
491b35cf0bf3 printString changed to include id
Claus Gittinger <cg@exept.de>
parents: 6784
diff changeset
  1215
    ].
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1216
    aStream
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1217
	    nextPutAll:')'
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1218
! !
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1219
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1220
!Process methodsFor:'private'!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1221
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1222
for:aBlock priority:aPrio
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1223
    "setup the new process - the receiver is not scheduled for
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1224
     execution, to get it running, send it #resume"
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1225
339
claus
parents: 337
diff changeset
  1226
    |nm active|
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1227
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1228
    prio := aPrio.
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1229
    startBlock := aBlock.
339
claus
parents: 337
diff changeset
  1230
    restartable := false.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1231
10436
2782fa4bd45a #newProcess et al never return nil - but raise an exception
Stefan Vogel <sv@exept.de>
parents: 9361
diff changeset
  1232
    Processor newProcessFor:self.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1233
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1234
    "
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1235
     give me a user-friendly name
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1236
    "
339
claus
parents: 337
diff changeset
  1237
    active := Processor activeProcess.
2268
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
  1238
    (nm := active name) notNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1239
	"
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1240
	 avoid name inflation
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1241
	"
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1242
	(nm endsWith:' sub') ifFalse:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1243
	    nm := nm , ' [' ,  active id printString , '] sub'
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1244
	].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1245
	name := nm
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
  1246
    ].
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1247
    creatorId := active id.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1248
    processGroupId := active processGroupId.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1249
    (processGroupId isNil or:[processGroupId == 0]) ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1250
	processGroupId := creatorId.
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1251
    ].
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1252
4880
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1253
    "/ since groupId is used to detect a systemProcess (0),
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1254
    "/ do not allow a 0 here; need an explicit beSystemProcess.
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1255
    processGroupId == 0 ifTrue:[processGroupId := nil].
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
  1256
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1257
    "Modified: 25.1.1997 / 01:28:54 / cg"
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1258
! !
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1259
7257
b9f0fb923c72 method category rename
Claus Gittinger <cg@exept.de>
parents: 6944
diff changeset
  1260
!Process methodsFor:'private-scheduler access'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1261
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1262
setId:idNumber state:stateSymbol
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1263
    "set id and state - not for public use"
375
claus
parents: 359
diff changeset
  1264
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1265
    id := idNumber.
4880
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1266
    creatorId := 0.
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1267
    processGroupId := nil.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1268
    state := stateSymbol.
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1269
    singleStepping isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1270
	singleStepping := false
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1271
    ].
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1272
    restartable isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1273
	restartable := false
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1274
    ].
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1275
    interruptsDisabled isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1276
	interruptsDisabled := false
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1277
    ].
1844
66d98c3a96f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1839
diff changeset
  1278
66d98c3a96f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1839
diff changeset
  1279
    "Modified: 30.10.1996 / 00:35:29 / cg"
182
f531860566fc more queries
claus
parents: 159
diff changeset
  1280
!
f531860566fc more queries
claus
parents: 159
diff changeset
  1281
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1282
setPriority:aNumber
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1283
    "set priority without telling processor - not for public use"
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1284
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1285
    prio := aNumber
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1286
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1287
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1288
setStartBlock:aBlock
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1289
    "set the receivers startup block"
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1290
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1291
    startBlock := aBlock
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1292
!
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1293
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1294
setStateTo:newState if:oldState
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1295
    state == oldState ifTrue:[state := newState]
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1296
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1297
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1298
setStateTo:newState if:oldState1 or:oldState2
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1299
    (state == oldState1 or:[state == oldState2]) ifTrue:[state := newState]
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1300
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1301
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1302
!Process methodsFor:'queries'!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1303
5397
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1304
isActive
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1305
    "return true if I am the active process"
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1306
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1307
    ^ Processor activeProcess == self
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1308
!
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1309
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1310
isDead
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1311
    "return true, if the receiver is a dead process"
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1312
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1313
    ^ (id isNil or:[state isNil or:[state == #dead]])
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1314
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1315
    "Modified: 23.12.1995 / 18:35:29 / cg"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1316
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1317
14359
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1318
isDebugged
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1319
    "return true, iff the receiver process is currently being debugged
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1320
     (i.e. is stopped and a debugger sits on top of it)"
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1321
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1322
    ^ (state == #debug)
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1323
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1324
    "Created: / 26-09-2012 / 14:56:36 / cg"
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1325
!
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1326
4874
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1327
isGUIProcess
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1328
    "return true, if this is a GUI process.
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1329
     I.e. a windowGroup process.
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1330
     This is currently not used, but allows end-user applications
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1331
     to terminate all subprocesses which are GUI related, and leave
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1332
     other background processes in the same process group untouched."
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1333
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1334
    ^ processType == #gui
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1335
!
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1336
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1337
isRestartable
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1338
    "return true, iff the receiver is restartable"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1339
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1340
    ^ restartable
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1341
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1342
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1343
isSingleStepping
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1344
    ^ singleStepping
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1345
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1346
5643
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1347
isStopped
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1348
    "return true, iff the receiver is stopped"
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1349
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1350
    ^ (state == #stopped)
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1351
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1352
    "Modified: 23.12.1995 / 18:35:29 / cg"
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1353
!
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1354
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1355
isSystemProcess
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1356
    "return true if aProcess is a system process,
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1357
     which should not be suspended/terminated etc.."
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1358
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1359
    ^ (Processor isPureEventDriven
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1360
       or:[id == 0
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1361
       or:[processGroupId == 0
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1362
       or:[(Display notNil and:[Display dispatchProcess == self])
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1363
       ]]])
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1364
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1365
    "
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1366
     Processor activeProcessIsSystemProcess
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1367
    "
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1368
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1369
    "Created: 17.4.1997 / 12:57:37 / stefan"
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1370
!
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1371
17407
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1372
isUserProcess
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1373
    "return true if aProcess is a user process."
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1374
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1375
    ^ processGroupId ~~ 0 and:[id ~~ 0]
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1376
!
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1377
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1378
nameOrId
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1379
    "return a string to identify the process - either name or id"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1380
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1381
    name notNil ifTrue:[^ name].
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1382
    ^ id printString
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1383
!
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1384
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1385
parentProcess
17244
2d730416819c class: Process
Claus Gittinger <cg@exept.de>
parents: 16846
diff changeset
  1386
    "answer my parent.
2d730416819c class: Process
Claus Gittinger <cg@exept.de>
parents: 16846
diff changeset
  1387
     Notice: we do only keep the id here, to prevent the parentProcess from being
2d730416819c class: Process
Claus Gittinger <cg@exept.de>
parents: 16846
diff changeset
  1388
     referenced (and therefore not garbage collected if it terminates)"
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1389
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1390
    ProcessorScheduler knownProcessesDo:[:p|
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1391
	p id = creatorId ifTrue:[^ p].
14443
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1392
    ].
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1393
    ^ nil.
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1394
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1395
    "
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1396
      Processor activeProcess parentProcess
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1397
    "
14443
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1398
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1399
    "Modified: / 26-10-2012 / 13:15:55 / cg"
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1400
!
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1401
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1402
processGroupLeader
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1403
    "answer the parent of this process group"
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1404
5681
95c1ed5be6c3 Fix #processGroupLeader
Stefan Vogel <sv@exept.de>
parents: 5675
diff changeset
  1405
    |processes leader next creatorId|
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1406
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1407
    processes := ProcessorScheduler knownProcesses.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1408
    leader := processes detect:[:p| p id = processGroupId] ifNone:nil.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1409
    leader isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1410
	leader := self.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1411
	[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1412
	    creatorId := leader creatorId.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1413
	    next := processes detect:[:p| p id = creatorId
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1414
					  and:[p processGroupId = processGroupId]]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1415
			      ifNone:nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1416
	] doWhile:[next notNil and:[leader := next. true]].
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1417
    ].
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1418
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1419
    ^ leader.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1420
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1421
    "
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1422
      Processor activeProcess processGroupLeader
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1423
    "
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1424
! !
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1425
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1426
!Process methodsFor:'special'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1427
15964
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1428
externalLookupPopIfEqual: lookupObject
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1429
    "Called by method lookup MOP when an lookup context is to be unwound
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1430
     to cleanup lookup stack"
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1431
    lookupActivations first == lookupObject ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1432
	lookupActivations := lookupActivations second.
15964
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1433
    ].
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1434
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1435
    "Created: / 04-10-2013 / 10:46:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1436
    "Modified (comment): / 04-10-2013 / 12:08:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1437
!
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1438
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1439
millisecondDelay:millis
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1440
    "suspend the current process for some time.
16846
60b0b8de3c25 class: Process
Claus Gittinger <cg@exept.de>
parents: 16563
diff changeset
  1441
     Attention:
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1442
	If the receiver is a system process (i.e. scheduler or event dispatcher)
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1443
	this blocks the whole Smalltalk for the time delta;
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1444
	if it's a normal thread, only that thread is suspended."
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1445
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1446
    (self isSystemProcess) ifTrue:[
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1447
	OperatingSystem millisecondDelay:millis
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1448
    ] ifFalse:[
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1449
	Delay waitForMilliseconds:millis
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1450
    ]
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1451
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1452
    "Created: 16.12.1995 / 13:10:53 / cg"
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1453
    "Modified: 17.4.1997 / 13:02:25 / stefan"
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1454
!
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1455
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1456
trapRestrictedMethods:trap
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1457
    "Allow/deny the execution of restricted methods.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1458
     Process specific method restriction is not implemented yet, so this call is
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1459
     redirected to ObjectMemory and causes a system wide restriction.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1460
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1461
     Notice: method restriction is a nonstandard feature, not supported
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1462
     by other smalltalk implementations and not specified in the ANSI spec.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1463
     This is EXPERIMENTAL - and being evaluated for usability.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1464
     It may change or even vanish (if it shows to be not useful)."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1465
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1466
    ^ObjectMemory trapRestrictedMethods:trap
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1467
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1468
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1469
	Processor activeProcess trapRestrictedMethods:true
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1470
	Processor activeProcess trapRestrictedMethods:false
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1471
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1472
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1473
    "Created: 8.11.1995 / 19:45:04 / stefan"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1474
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1475
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1476
uninterruptablyDo:aBlock
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1477
    "execute aBlock with interrupts blocked.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1478
     This does not prevent preemption by a higher priority processes
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1479
     if any becomes runnable due to the evaluation of aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1480
     (i.e. if a semaphore is signalled there)."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1481
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1482
    "we must keep track of blocking-state if this is called nested"
2302
259d1b9326ed in uninterruptablyDo::
Claus Gittinger <cg@exept.de>
parents: 2268
diff changeset
  1483
    (OperatingSystem blockInterrupts) ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1484
	"/ already blocked
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1485
	^ aBlock value
2302
259d1b9326ed in uninterruptablyDo::
Claus Gittinger <cg@exept.de>
parents: 2268
diff changeset
  1486
    ].
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1487
6421
58dca33cf0fc #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 6322
diff changeset
  1488
    ^ aBlock ensure:[OperatingSystem unblockInterrupts]
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1489
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1490
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1491
waitUntilSuspended
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1492
    "wait until the receiver is suspended."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1493
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1494
    self isDead ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1495
	[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1496
	    "/ must check again - interrupt could have happened
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1497
	    "/ and process already terminated.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1498
	    self isDead ifFalse:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1499
		suspendSemaphore isNil ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1500
		    suspendSemaphore := Semaphore new name:'process suspend'
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1501
		].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1502
		suspendSemaphore wait
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1503
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1504
	] valueUninterruptably
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1505
    ]
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1506
1946
370f57e569dc oops - race in waitUntilSuspended & waitUntilTerminated
Claus Gittinger <cg@exept.de>
parents: 1844
diff changeset
  1507
    "Modified: 8.11.1996 / 23:05:24 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1508
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1509
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1510
waitUntilTerminated
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1511
    "wait until the receiver is terminated.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1512
     This method allows another process to wait till the receiver finishes."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1513
6774
6711472e6df4 oops - waitUntil terminated for a process that did not rune
penk
parents: 6739
diff changeset
  1514
    self waitUntilTerminatedWithTimeout:nil
1033
244530001e84 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 1000
diff changeset
  1515
1789
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1516
    "
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1517
     |p|
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1518
6774
6711472e6df4 oops - waitUntil terminated for a process that did not rune
penk
parents: 6739
diff changeset
  1519
     p := [100 timesRepeat:[1000 factorial]] forkAt:4.
1789
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1520
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1521
     Transcript showCR:'now waiting ...'.
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1522
     p waitUntilTerminated.
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1523
     Transcript showCR:'done.'
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1524
    "
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1525
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1526
    "Modified: 12.1.1997 / 00:40:59 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1527
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1528
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1529
waitUntilTerminatedWithTimeout:secondsOrNil
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1530
    "wait until the receiver is terminated or (if non-nil) until
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1531
     the time period exired.
13206
bffd4afb5be0 comment/format in: #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 13016
diff changeset
  1532
     Returns true if a timeout occurred.
8566
a8101fa70c6c comment
Stefan Vogel <sv@exept.de>
parents: 8544
diff changeset
  1533
     This method allows another process to wait until the receiver finishes
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1534
     (optionally) within some time."
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1535
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1536
    |sema didTimeout|
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1537
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1538
    didTimeout := false.
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1539
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1540
    self isDead ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1541
	[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1542
	    "/ must check again - interrupt could have happened
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1543
	    "/ and process already terminated.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1544
	    self isDead ifFalse:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1545
		sema := Semaphore new name:'process termination'.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1546
		self addExitAction:[sema signal].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1547
		didTimeout := (sema waitWithTimeout:secondsOrNil) isNil
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1548
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1549
	] valueUninterruptably.
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1550
    ].
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1551
    ^ didTimeout
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1552
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1553
    "
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1554
     |p|
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1555
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1556
     p := [10 timesRepeat:[10000 factorial]] forkAt:4.
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1557
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1558
     Transcript showCR:'now waiting ...'.
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1559
     (p waitUntilTerminatedWithTimeout:2) ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1560
	 Transcript showCR:'timeout occurred.'
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1561
     ]
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1562
    "
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1563
13206
bffd4afb5be0 comment/format in: #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 13016
diff changeset
  1564
    "Modified: / 13-01-2011 / 13:45:08 / cg"
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1565
!
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1566
9059
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1567
withHigherPriorityDo:aBlock
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1568
    "execute aBlock at a higher priority."
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1569
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1570
    ^ self withPriority:(prio + 1) do:aBlock
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1571
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1572
    "
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1573
     Processor activeProcess withHigherPriorityDo:[3000 factorial]
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1574
    "
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1575
!
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1576
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1577
withLowerPriorityDo:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1578
    "execute aBlock at a lower priority. This can be used to perform
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1579
     time-consuming operations at a more user-friendly priority."
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1580
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1581
    ^ self withPriority:(prio - 1) do:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1582
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1583
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1584
     Processor activeProcess withLowerPriorityDo:[3000 factorial]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1585
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1586
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1587
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1588
withPriority:aPrio do:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1589
    "execute aBlock at another priority. This can be used to perform
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1590
     time-consuming operations at a more user-friendly priority,
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1591
     or some critical action at a higher priority. Do not use too high
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1592
     of a priority to avoid locking up the system (event processing takes place
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1593
     at 24)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1594
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1595
    |oldprio|
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1596
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1597
    oldprio := prio.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1598
    self priority:aPrio.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1599
6421
58dca33cf0fc #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 6322
diff changeset
  1600
    ^ aBlock ensure:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1601
	self priority:oldprio
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1602
    ]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1603
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1604
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1605
     Processor activeProcess withPriority:7 do:[3000 factorial]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1606
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1607
    "be careful - even ^C wont work until done:
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1608
     Processor activeProcess withPriority:25 do:[3000 factorial]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1609
    "
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1610
!
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1611
4433
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1612
withPriority:lowPrio to:highPrio do:aBlock
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1613
    "execute aBlock at a priority range. This can be used to perform
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1614
     time-consuming operations at a more user-friendly priority,
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1615
     or some critical action at a higher priority. Do not use too high
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1616
     of a priority to avoid locking up the system (event processing takes place
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1617
     at 24)"
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1618
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1619
    |oldprio oldRange|
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1620
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1621
    oldprio := prio.
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1622
    oldRange := priorityRange.
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1623
    self priorityRange:(lowPrio to:highPrio).
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1624
6421
58dca33cf0fc #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 6322
diff changeset
  1625
    ^ aBlock ensure:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1626
	self priorityRange:oldRange.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1627
	self priority:oldprio.
4433
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1628
    ]
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1629
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1630
    "
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1631
     Processor activeProcess withPriority:7 to:8 do:[3000 factorial]
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1632
    "
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1633
!
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1634
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1635
withSystemBackgroundPriorityDo:aBlock
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1636
    "execute aBlock at system background priority.
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1637
     This can be used to perform
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1638
     background operations at a more user-friendly priority."
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1639
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1640
    ^ self withPriority:(Processor systemBackgroundPriority) do:aBlock
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1641
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1642
    "
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1643
     Processor activeProcess withSystemBackgroundPriorityDo:[3000 factorial]
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1644
    "
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1645
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1646
    "Created: 7.8.1997 / 12:56:23 / cg"
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1647
!
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1648
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1649
withUserBackgroundPriorityDo:aBlock
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1650
    "execute aBlock at background priority. This can be used to perform
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1651
     time-consuming operations at a more user-friendly priority."
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1652
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1653
    ^ self withPriority:(Processor userBackgroundPriority) do:aBlock
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1654
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1655
    "
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1656
     Processor activeProcess withUserBackgroundPriorityDo:[3000 factorial]
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1657
    "
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1658
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1659
    "Created: 6.8.1997 / 15:40:02 / cg"
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
  1660
! !
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
  1661
5256
1209e167d63e category rename
Claus Gittinger <cg@exept.de>
parents: 5088
diff changeset
  1662
!Process methodsFor:'startup'!
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1663
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1664
imageRestart
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1665
    "restart the process from the beginning.
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1666
     This is sent by the ProcessorScheduler at image restart time,
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1667
     to all restartable processes."
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1668
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1669
    |savedGroupId|
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1670
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1671
"/  ('restart process ' , id printString) errorPrintNL.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1672
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1673
    savedGroupId := processGroupId.
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1674
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1675
    (Processor newProcessFor:self withId:id) ifFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1676
	"for some reason, the Processor was unable to create
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1677
	 a VM process for me ...."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1678
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1679
	('Process [warning]: process ' , id printString , ' failed to restart.') errorPrintCR.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1680
	^ nil
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1681
    ].
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1682
    processGroupId := savedGroupId.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1683
    self resume
1086
7b0641a2e1ef nicer message
Claus Gittinger <cg@exept.de>
parents: 1033
diff changeset
  1684
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1685
    "Created: 28.10.1996 / 20:32:34 / cg"
2130
b9e7e1cf98bd newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1980
diff changeset
  1686
    "Modified: 10.1.1997 / 18:01:13 / cg"
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1687
!
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1688
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1689
restart
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1690
    "restart the process from the beginning.
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1691
     This is only possible, if its restartable."
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1692
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1693
    restartable ifFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1694
	^ self error:'process is not restartable' mayProceed:true
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1695
    ].
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1696
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1697
    self interruptWith:[RestartSignal raise]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1698
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1699
    "Modified: 12.1.1997 / 00:54:32 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1700
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1701
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1702
start
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1703
    "start the process - this is sent by the VM to the process to get
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1704
     the process up and running.
329
claus
parents: 326
diff changeset
  1705
     Sending #start to the process (instead of directly executing the startBlock)
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1706
     allows more flexible handling of processes, since anything that responds
329
claus
parents: 326
diff changeset
  1707
     to #start can be handled transparently by the VM then ..."
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1708
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1709
    |block|
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1710
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1711
    (block := startBlock) notNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1712
	"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1713
	"/ just for your convenience ...
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1714
	"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1715
	name isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1716
	    name := '(' , block displayString , ')'
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1717
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1718
	restartable ~~ true ifTrue:[startBlock := nil].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1719
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1720
	[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1721
	    "/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1722
	    "/ handle Process-Termination, Process-Restart and Abort
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1723
	    "/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1724
	    CaughtSignals handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1725
		ex creator == RestartProcessRequest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1726
		     ex restart
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1727
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1728
		ex return
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1729
	    ] do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1730
		exceptionHandlerSet isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1731
		    exceptionHandlerSet := ExceptionHandlerSet new.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1732
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1733
		"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1734
		"/ block is the one which received the fork some time ago...
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1735
		"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1736
		exceptionHandlerSet handleDo:block
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1737
	    ]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1738
	] ensure:[self terminateNoSignal].
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1739
    ] ifFalse:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1740
	"is this artificial restriction useful ?"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1741
	self error:'a process cannot be started twice' mayProceed:true
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1742
    ]
1475
e94168c99261 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1474
diff changeset
  1743
6219
6fbbd5e48b8f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6212
diff changeset
  1744
    "Modified: / 17.11.2001 / 16:45:32 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1745
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1746
7263
f814a5cfc333 method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  1747
!Process methodsFor:'suspend & resume'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1748
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1749
abort
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1750
    "raise an AbortOperationRequest in the receiver process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1751
     Most processes willing to handle this will return to some save state
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1752
     (typically, some kind of event loop).
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1753
     If not handled, this will result in termination of the process."
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1754
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1755
    Processor activeProcess == self ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1756
	AbortOperationRequest raiseRequest
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1757
    ] ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1758
	self interruptWith:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1759
	    AbortOperationRequest raiseRequest
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1760
	].
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1761
    ]
6204
2bafef9151dd class based exceptions - abortSignal;
Claus Gittinger <cg@exept.de>
parents: 5870
diff changeset
  1762
2bafef9151dd class based exceptions - abortSignal;
Claus Gittinger <cg@exept.de>
parents: 5870
diff changeset
  1763
    "Modified: / 16.11.2001 / 17:39:18 / cg"
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1764
!
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1765
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1766
resume
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1767
    "resume the receiver process"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1768
4002
341a896cb334 allow stopping a waiting process
Claus Gittinger <cg@exept.de>
parents: 3785
diff changeset
  1769
    state == #stopped ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1770
	state := #run.
4002
341a896cb334 allow stopping a waiting process
Claus Gittinger <cg@exept.de>
parents: 3785
diff changeset
  1771
    ].
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1772
    Processor resume:self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1773
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1774
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1775
resumeForSingleSend
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1776
    "resume the receiver process, but only let it execute a single send."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1777
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1778
    Processor resumeForSingleSend:self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1779
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1780
326
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1781
stop
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1782
    "suspend the receiver process - will continue to run when a resume is sent.
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1783
     A stopped process will not be resumed for interrupt processing."
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1784
11283
b092a213a0d3 comments
Stefan Vogel <sv@exept.de>
parents: 10742
diff changeset
  1785
    self suspendWithState:#stopped.
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1786
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
  1787
    "Modified: / 13.12.1995 / 13:22:58 / stefan"
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
  1788
    "Modified: / 27.7.1998 / 23:37:15 / cg"
326
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1789
!
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1790
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1791
suspend
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1792
    "suspend the receiver process - it will continue to run when a resume is sent.
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1793
     Notice, that an interrupt will also resume the receiver,
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1794
     so any waiting code should be prepared for premature return from
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1795
     a suspend (see wait code in Semaphore).
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1796
     Use #stop for a hard-suspend, which is not affected by interrupts."
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1797
1474
e1bc3fa1a119 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1352
diff changeset
  1798
    self suspendWithState:#suspended
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1799
1474
e1bc3fa1a119 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1352
diff changeset
  1800
    "Modified: 17.6.1996 / 14:41:34 / cg"
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1801
!
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1802
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1803
suspendWithState:aStateSymbol
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1804
    "like suspend, this suspends the receiver process until a resume is sent.
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1805
     This sets the state to the argument, aStateSymbol, which is shown
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1806
     in the ProcessMonitor (instead of #suspended).
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1807
     (i.e. no new functionality, but a bit more debuggability)
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1808
     Notice, that an interrupt will also resume the receiver,
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1809
     so any waiting code should be prepared for premature return from
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1810
     a suspend (see wait code in Semaphore).
16312
57924eddbb3e class: Process
Claus Gittinger <cg@exept.de>
parents: 16182
diff changeset
  1811
     Use #stop for a hard-suspend, which is not affected by interrupts.
57924eddbb3e class: Process
Claus Gittinger <cg@exept.de>
parents: 16182
diff changeset
  1812
     Should be called with interrupts disabled."
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1813
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1814
    suspendSemaphore notNil ifTrue:[suspendSemaphore signalForAll].
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1815
    suspendActions notNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1816
	|savedState|
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1817
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1818
	savedState := state.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1819
	state := #aboutToSuspend.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1820
	suspendActions do:[:action | action value].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1821
	state ~~ #aboutToSuspend ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1822
	    "/ mhmh - one of the suspendActions lead to making me active again;
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1823
	    "/ bail out.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1824
	    "/ This fixes the Semaphore was signalled, but process did not run error,
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1825
	    "/ which can happen when a process with a suspend action goes into a readWait,
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1826
	    "/ and the suspend action does a thread switch, and the readWait semaphore gets
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1827
	    "/ signalled before we come back here. Then the semaphore wakeup will have already
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1828
	    "/ place me back into the run state, so I should not go into a suspend below.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1829
	    ^ self.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1830
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1831
	state := savedState.
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1832
    ].
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1833
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1834
    "
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1835
     this is a bit of a kludge: allow someone else to
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1836
     set the state to something like #ioWait etc.
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1837
     In this case, do not set the receivers state to #suspend.
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1838
     (All of this to enhance the output of the process monitor ...)
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1839
    "
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1840
    (state == #active
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1841
    or:[state == #run
4002
341a896cb334 allow stopping a waiting process
Claus Gittinger <cg@exept.de>
parents: 3785
diff changeset
  1842
    or:[aStateSymbol == #stopped]]) ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1843
	state := aStateSymbol.
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1844
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1845
    Processor suspend:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1846
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1847
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1848
terminate
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1849
    "terminate the receiver process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1850
     Termination is done by raising the terminateSignal in the receiver process,
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2636
diff changeset
  1851
     which can be caught.
375
claus
parents: 359
diff changeset
  1852
     All unwind actions and the exit-actions (if any)
4415
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
  1853
     will be performed before the process is really terminated.
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
  1854
     Notice, that the terminate actions are performed by the receiver,
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
  1855
     at its current priority. Therefore, in case higher prio processes are
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
  1856
     running, it may take any arbitrary time until the termination is eventually
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
  1857
     done."
10
claus
parents: 5
diff changeset
  1858
2888
3e8b5166d90f a rocess which had no chance yet to run, can be #terminated with
Claus Gittinger <cg@exept.de>
parents: 2857
diff changeset
  1859
    |wasBlocked|
3e8b5166d90f a rocess which had no chance yet to run, can be #terminated with
Claus Gittinger <cg@exept.de>
parents: 2857
diff changeset
  1860
3293
3f52fbf6b94c oops - a self-terminating process did not evaluate its
Claus Gittinger <cg@exept.de>
parents: 3094
diff changeset
  1861
    Processor activeProcess ~~ self ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1862
	wasBlocked := OperatingSystem blockInterrupts.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1863
	[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1864
	    state == #osWait ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1865
		self terminateNoSignal.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1866
		^ self.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1867
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1868
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1869
	    "if the receiver had no chance to execute yet,
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1870
	     it can be shot down without a signal"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1871
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1872
	    self suspendedContext isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1873
		self terminateNoSignal.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1874
		^ self
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1875
	    ]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1876
	] ensure:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1877
	    wasBlocked ifFalse:[OperatingSystem unblockInterrupts]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1878
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1879
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1880
	"register an interrupt action and resume that process"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1881
	self interruptWith:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1882
	    NoHandlerError handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1883
		ex exception creator == TerminateProcessRequest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1884
		    ex return.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1885
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1886
		ex reject.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1887
	    ] do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1888
		TerminateProcessRequest raise.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1889
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1890
	    self terminateNoSignal.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1891
	].
3293
3f52fbf6b94c oops - a self-terminating process did not evaluate its
Claus Gittinger <cg@exept.de>
parents: 3094
diff changeset
  1892
    ] ifFalse:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1893
	"terminating myself"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1894
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1895
	NoHandlerError handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1896
	    ex exception creator == TerminateProcessRequest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1897
		ex return.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1898
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1899
	    ex reject.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1900
	] do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1901
	    TerminateProcessRequest raise.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1902
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1903
	self terminateNoSignal.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1904
    ]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1905
3776
87eda283dab1 fix terminate while in osWait (win32)
Claus Gittinger <cg@exept.de>
parents: 3723
diff changeset
  1906
    "Modified: / 24.8.1998 / 18:29:46 / cg"
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1907
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1908
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1909
terminateAllGUISubprocesses
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1910
    "terminate all the receivers gui subprocesses and their children as well
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1911
     (i.e. all processes which are offsprings of the receiver, except for
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1912
      the receiver itself)."
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1913
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1914
    id isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1915
	"/ problem:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1916
	"/ if receiver is already dead, its id is nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1917
	"/ children are found by looking for processes with a parentID identical to
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1918
	"/ mine - ifNil, system processes are found, which is probably not what you
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1919
	"/ want ...
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1920
	"/ FIX: remember the id (or dont nil it when terminating)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1921
	"/ requires VM changes.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1922
	ProcessorScheduler invalidProcessSignal
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1923
	    raiseRequestWith:self
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1924
	    errorString:'process is already dead - cannot determine child processes'.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1925
	^ self
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1926
    ].
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1927
    ProcessorScheduler knownProcesses do:[:aProcess |
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1928
	aProcess ~~ self ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1929
	    aProcess creatorId == id ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1930
		aProcess isGUIProcess ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1931
		    aProcess terminateWithAllGUISubprocesses
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1932
		]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1933
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1934
	]
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1935
    ].
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1936
14443
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1937
    "Created: / 28-10-1996 / 20:43:32 / cg"
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1938
    "Modified: / 26-10-2012 / 13:16:35 / cg"
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1939
!
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1940
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1941
terminateAllSubprocessesInGroup
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1942
    "terminate all subprocesses which have the receiver process as groupID,
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1943
     and their group-children as well.
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1944
     (i.e. all processes in the receivers process group, except for the receiver itself,
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1945
      and recursively oll of their group processes.)."
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  1946
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1947
    id isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1948
	"/ problem:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1949
	"/ if receiver is already dead, its id is nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1950
	"/ children are found by looking for processes with a parentID identical to
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1951
	"/ mine - ifNil, system processes are found, which is probably not what you
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1952
	"/ want ...
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1953
	"/ FIX: remember the id (or dont nil it when terminating)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1954
	"/ requires VM changes.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1955
	ProcessorScheduler invalidProcessSignal
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1956
	    raiseRequestWith:self
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1957
	    errorString:'process is already dead - cannot determine child processes'.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1958
	^ self
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1959
    ].
9300
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1960
    self terminateAllSubprocessesInGroup:id
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1961
!
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1962
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1963
terminateAllSubprocessesInGroup:aGroup
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1964
    "terminate all subprocesses which have aGroup as groupID,
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1965
     and their group-children as well.
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1966
     (i.e. all processes in the receivers process group, except for the receiver itself,
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1967
      and recursively oll of their group processes.)."
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1968
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  1969
    ProcessorScheduler knownProcesses do:[:aProcess |
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1970
	aProcess ~~ self ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1971
	    (aProcess processGroupId == aGroup) ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1972
		aProcess terminateWithAllSubprocessesInGroup
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1973
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1974
	]
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  1975
    ].
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1976
3094
647219dc860b avoid endless recursion in terminateAllSubProcesses
Claus Gittinger <cg@exept.de>
parents: 3013
diff changeset
  1977
    "Created: / 28.10.1996 / 20:43:32 / cg"
647219dc860b avoid endless recursion in terminateAllSubProcesses
Claus Gittinger <cg@exept.de>
parents: 3013
diff changeset
  1978
    "Modified: / 3.11.1997 / 00:28:06 / cg"
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1979
!
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1980
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1981
terminateGroup
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1982
    "terminate the receiver with all of its created subprocesses
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1983
     that are in the receivers process group."
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1984
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1985
    id isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1986
	"/ problem:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1987
	"/ if receiver is already dead, its id is nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1988
	"/ children are found by looking for processes with a parentID identical to
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1989
	"/ mine - ifNil, system processes are found, which is probably not what you
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1990
	"/ want ...
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1991
	"/ FIX: remember the id (or dont nil it when terminating)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1992
	"/ requires VM changes.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1993
	ProcessorScheduler invalidProcessSignal
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1994
	    raiseRequestWith:self
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1995
	    errorString:'process is already dead - cannot determine child processes'.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1996
	^ self
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1997
    ].
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1998
    ProcessorScheduler knownProcesses do:[:aProcess |
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1999
	aProcess ~~ self ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2000
	    aProcess processGroupId == id ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2001
		aProcess terminate
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2002
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2003
	]
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  2004
    ].
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  2005
    self terminate
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  2006
!
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  2007
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2008
terminateNoSignal
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2009
    "hard-terminate the receiver process without sending a terminateSignal
375
claus
parents: 359
diff changeset
  2010
     or performing any unwind-handling.
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2011
     However, exit-actions are performed.
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2012
     This is useful in case of emergency, when a buggy terminationHandler
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2013
     prevents you from getting a process to terminate."
375
claus
parents: 359
diff changeset
  2014
claus
parents: 359
diff changeset
  2015
    |block|
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2016
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2017
    "/ this is treated like the final suspend
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2018
    suspendActions notNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2019
	[suspendActions isEmpty] whileFalse:[
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2020
	    block := suspendActions removeFirst.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2021
	    block value.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2022
	]
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2023
    ].
375
claus
parents: 359
diff changeset
  2024
    exitActions notNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2025
	[exitActions isEmpty] whileFalse:[
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2026
	    block := exitActions removeFirst.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2027
	    block value.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2028
	]
375
claus
parents: 359
diff changeset
  2029
    ].
329
claus
parents: 326
diff changeset
  2030
    suspendSemaphore notNil ifTrue:[suspendSemaphore signalForAll].
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2031
    Processor terminateNoSignal:self
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2032
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2033
    "Modified: 13.12.1995 / 13:40:14 / stefan"
2384
ceb4f8de635a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2302
diff changeset
  2034
    "Modified: 12.2.1997 / 12:41:38 / cg"
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2035
!
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2036
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2037
terminateSubprocesses
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2038
    "terminate all the receivers subprocesses
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2039
     (i.e. all processes in the receivers process group, except for
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2040
      the receiver itself)."
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2041
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  2042
    id isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2043
	"/ problem:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2044
	"/ if receiver is already dead, its id is nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2045
	"/ children are found by looking for processes with a parentID identical to
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2046
	"/ mine - ifNil, system processes are found, which is probably not what you
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2047
	"/ want ...
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2048
	"/ FIX: remember the id (or dont nil it when terminating)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2049
	"/ requires VM changes.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2050
	ProcessorScheduler invalidProcessSignal
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2051
	    raiseRequestWith:self
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2052
	    errorString:'process is already dead - cannot determine child processes'.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2053
	^ self
10496
1198c42b85f5 Be conservative when setting helper processes of executeCommand:...
Stefan Vogel <sv@exept.de>
parents: 10436
diff changeset
  2054
    ].
1198c42b85f5 Be conservative when setting helper processes of executeCommand:...
Stefan Vogel <sv@exept.de>
parents: 10436
diff changeset
  2055
    processGroupId == 0 ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2056
	ProcessorScheduler invalidProcessSignal
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2057
	    raiseWith:self errorString:'trying to terminate the system process group'.
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  2058
    ].
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2059
    ProcessorScheduler knownProcesses do:[:aProcess |
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2060
	aProcess ~~ self ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2061
	    (aProcess processGroupId == processGroupId
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2062
	    or:[aProcess processGroupId == id]) ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2063
		aProcess terminate
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2064
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2065
	]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2066
    ].
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2067
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2068
    "Created: 28.10.1996 / 20:41:49 / cg"
2891
9020b3130d83 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2888
diff changeset
  2069
    "Modified: 26.8.1997 / 03:09:57 / cg"
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2070
!
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2071
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2072
terminateWithAllGUISubprocesses
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2073
    "terminate the receiver with all of its created gui subprocesses and their gui children."
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2074
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2075
    self terminateAllGUISubprocesses.
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2076
    self terminate
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2077
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2078
    "Modified: 28.10.1996 / 20:42:00 / cg"
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2079
    "Created: 28.10.1996 / 20:44:07 / cg"
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2080
!
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2081
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2082
terminateWithAllSubprocessesInGroup
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2083
    "terminate the receiver with
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2084
     all subprocesses which have the receivers process ID as groupID,
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2085
     and their group-children as well.
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2086
     (i.e. the receiver plus all processes in the receivers process group,
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2087
      and recursively all of their group processes)."
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2088
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2089
    self terminateAllSubprocessesInGroup.
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2090
    self terminate
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2091
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2092
    "Modified: 28.10.1996 / 20:42:00 / cg"
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2093
    "Created: 28.10.1996 / 20:44:07 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2094
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2095
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2096
!Process methodsFor:'thread local storage'!
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2097
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2098
environmentAt:aKey
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2099
    "return the value of a thread local variable, or raise an error, if no such variable exists"
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2100
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2101
    ^ self
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2102
	environmentAt:aKey
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2103
	ifAbsent:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2104
	    self errorKeyNotFound:aKey.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2105
	]
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2106
!
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2107
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2108
environmentAt:aKey ifAbsent:defaultValue
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2109
    "return the value of a thread local variable, or the value of defaultValue if no such variable exists"
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2110
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2111
    |val|
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2112
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2113
    environment isNil ifTrue:[^ defaultValue value].
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2114
    val := environment at:aKey ifAbsent:[^ defaultValue value].
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2115
    ^ val value.
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2116
!
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2117
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2118
environmentAt:aKey put:aValue
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2119
    "set the value of a thread local variable. Returns aValue"
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2120
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2121
    |var|
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2122
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2123
    environment isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2124
	environment := IdentityDictionary new
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2125
    ].
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2126
    var := environment at:aKey ifAbsent:nil.
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2127
    var isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2128
	var := ValueHolder new.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2129
	environment at:aKey put:var.
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2130
    ].
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2131
    var value:aValue.
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2132
    ^ aValue
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2133
!
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2134
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2135
threadVariableValueOf:aKey
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2136
    "return the value of a thread local variable, or nil if no such variable exists"
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2137
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2138
    ^ self environmentAt:aKey ifAbsent:nil
16047
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2139
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2140
    "
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2141
     see example in withThreadVariable:boundTo:do:
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2142
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2143
    "
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2144
!
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2145
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2146
withThreadVariable:variableNameSymbol boundTo:aValue do:aBlock
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2147
    "evaluate a block with the threadLocalVariable being bound to aValue;
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2148
     undo the variable binding afterwards."
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2149
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2150
    |var oldValue result|
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2151
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2152
    environment isNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2153
	environment := IdentityDictionary new
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2154
    ].
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2155
    var := environment at:variableNameSymbol ifAbsent:nil.
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2156
    var isNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2157
	var := ValueHolder new.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2158
	environment at:variableNameSymbol put:var.
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2159
    ].
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2160
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2161
    oldValue := var value.
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2162
    [
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2163
	var value:aValue.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2164
	result := aBlock value.
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2165
    ] ensure:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2166
	oldValue isNil
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2167
	    ifTrue:[ environment removeKey:variableNameSymbol]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2168
	    ifFalse:[ var value:oldValue ]
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2169
    ].
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2170
    ^ result
16047
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2171
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2172
    "
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2173
     |printIt|
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2174
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2175
     printIt := [ Transcript showCR:'foo is now ',(Processor activeProcess threadVariableValueOf:#foo) printString ].
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2176
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2177
     Processor activeProcess
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2178
	 withThreadVariable:#foo
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2179
	 boundTo:1234
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2180
	 do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2181
	    printIt value.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2182
	    Processor activeProcess
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2183
		withThreadVariable:#foo
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2184
		boundTo:2345
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2185
		do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2186
		    printIt value
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2187
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2188
	    ]
16047
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2189
    "
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2190
! !
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2191
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  2192
!Process class methodsFor:'documentation'!
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2193
13398
5c6fd278f26b added: #version_CVS
vrany
parents: 13206
diff changeset
  2194
version_CVS
5c6fd278f26b added: #version_CVS
vrany
parents: 13206
diff changeset
  2195
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
  2196
    ^ '$Header$'
12764
c3da6be46ff1 use _MAX_INT instead of 0x3fffffff in primitive code when generating SmallIntegers
Stefan Vogel <sv@exept.de>
parents: 11416
diff changeset
  2197
!
c3da6be46ff1 use _MAX_INT instead of 0x3fffffff in primitive code when generating SmallIntegers
Stefan Vogel <sv@exept.de>
parents: 11416
diff changeset
  2198
13398
5c6fd278f26b added: #version_CVS
vrany
parents: 13206
diff changeset
  2199
version_SVN
15964
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  2200
    ^ '$ Id: Process.st 10643 2011-06-08 21:53:07Z vranyj1  $'
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2201
! !
6774
6711472e6df4 oops - waitUntil terminated for a process that did not rune
penk
parents: 6739
diff changeset
  2202
15117
d7e7376ee1a4 class: Process
Claus Gittinger <cg@exept.de>
parents: 14724
diff changeset
  2203
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  2204
Process initialize!