Process.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 17 May 2016 10:05:14 +0100
branchjv
changeset 19863 513bd7237fe7
parent 19811 65fec19facb0
parent 19860 324edacff5cc
child 20078 a680abc90e84
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
    12
"{ Package: 'stx:libbasic' }"
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
    13
17407
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
    14
"{ NameSpace: Smalltalk }"
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
    15
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
Link subclass:#Process
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    17
	instanceVariableNames:'id lookupActivations lookupDisabled prio state startBlock name
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    18
		restartable interruptActions exitActions suspendSemaphore
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    19
		singleStepping emergencySignalHandler suspendActions creatorId
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    20
		processGroupId interruptsDisabled priorityRange
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
    21
		exceptionHandlerSet processType environment'
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
    22
	classVariableNames:'TerminateSignal RestartSignal CaughtSignals'
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
    23
	poolDictionaries:''
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
    24
	category:'Kernel-Processes'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
    27
!Process class methodsFor:'documentation'!
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    28
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    29
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    30
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    31
 COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
    32
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    33
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    34
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    35
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    37
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    38
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    39
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    40
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    41
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    42
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    43
documentation
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    44
"
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
    45
    WARNING:
18189
e06ab6591712 hardcoding instvar offsets is VERY BAD (fix for Jan's lookup bug)
Claus Gittinger <cg@exept.de>
parents: 17544
diff changeset
    46
	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
    47
	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
    48
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    49
    Instances of Process represent lightweight smalltalk processes
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    50
    (i.e. threads). These all run in a shared smalltalk/X address space,
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    51
    and can thus access and communicate via any objects.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    52
    Do not confuse these with (heavy-weight) unix processes, which are
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    53
    created differently, and do NOT run in the same address space.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    54
    Also notice, that heavy-weight process creation takes much longer.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    55
    (see OperatingSystemclass>>fork).
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    56
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    57
    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
    58
    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
    59
    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
    60
    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
    61
    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
    62
    runtime system would make things slower in most cases.
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    63
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    64
    Processes are typically created by sending #fork or #forkAt: to a block;
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    65
    the block creates a new process, defines itself as its startBlock,
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    66
    and (optionally) tells the Processor about the new process.
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    67
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    68
    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
    69
    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
    70
    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
    71
    support (i.e. it can be easily changed).
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
    72
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    73
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    74
    Processes can be terminated either soft or via a hardTerminate.
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    75
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    76
    A soft terminate (see Process>>terminate) will raise a TerminationSignal
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    77
    in the process, which can be handled by the process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    78
    If no other handler was specified, the processes own handler
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    79
    (see Process>>start) will catch the signal and terminate the process.
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    80
    During this signal processing, normal unwind processing takes place,
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
    81
    this means that with a soft terminate, all valueOnUnwind:/valueNowOrOnUnwind:
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    82
    cleanup blocks are evaluated.
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    83
    (so a process which has set up those blocks correctly does not have to
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    84
     care especially about cleanup in case of termination).
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2636
diff changeset
    85
    Other than that, the TerminateSignal can be caught for special cleanup or
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
    86
    even to make the process continue execution.
4415
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
    87
    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
    88
    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
    89
    done in the context of the terminating process itself).
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    90
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    91
    A hard terminate (Process>>terminateNoSignal) will NOT do all of the above,
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    92
    but quickly (and without any cleanup) terminate the process.
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    93
    The debugger offers a quickTerminate option on its popupMenu for
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    94
    situations, when soft termination fails. (for example, if some error was
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    95
    coded into a handler or unwind block).
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
    96
4415
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
    97
    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
    98
    (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
    99
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   100
    Notice:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   101
	in Smalltalk/X, processes are gone, when an image is restarted;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   102
	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
   103
	Usually, this is done by depending on ObjectMemory, recreating the
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   104
	process(es) when the #returnFromSnapshot-change notifiction arrives.
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   105
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   106
	All views (actually windowGroups) recreate their window process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   107
	on image-restart. You have to do so manually for your own processes.
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   108
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   109
    A later version will allow specification of automatic restart, but
13563
a82e5ddf671a changed: #documentation
Claus Gittinger <cg@exept.de>
parents: 13398
diff changeset
   110
    that's not yet implemented. However, even when implemented, restartable processes
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   111
    will be recreated to restart from the beginning. It will not be possible to
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   112
    automatically continue a processes execution where it left off.
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   113
    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
   114
    implement process continuation, the machines stack had to be preserved and
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   115
    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
   116
    this has not been implemented, since the machines stack layout is highly machine/compiler
375
claus
parents: 359
diff changeset
   117
    dependent, thus leading to much bigger porting effort of ST/X (which conflicts
claus
parents: 359
diff changeset
   118
    with ST/X's design goal of being highly portable).
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   119
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   120
    Process synchronization:
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   121
	Synchronization with cooperating processes is supported as usual,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   122
	via Semaphores (see Semaphore, Delay, SharedQueue etc.)
375
claus
parents: 359
diff changeset
   123
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   124
	With uncooperative processes, only synchronization on suspend
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   125
	and termination is possible:
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   126
	  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
   127
	  This waiting is implemented by using suspendSemaphore and exitBlocks
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   128
	  (where an exitSemaphore is signalled).
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   129
	  See waitUntilSuspended / waitUntilTerminated.
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   130
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   131
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   132
    Process states:
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   133
	#dead           process has (been) terminated;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   134
			the process instance has no underlting
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   135
			thread.
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   136
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   137
	#run            the process is willing to run,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   138
			but not active (i.e. another higher prio
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   139
			process is currently executing)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   140
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   141
	#active         the process is the current process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   142
			(there is only one)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   143
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   144
	#ioWait         waiting on some io-related semaphore
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   145
			(typically in #readWait / #writeWait)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   146
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   147
	#eventWait      waiting on some GUI event
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
	#timeWait       waiting on a timer-related semaphore
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
	#wait           waiting on some (other) 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
	#suspended      stopped from execution; however, an interrupt
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   154
			will return it into the run state.
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   155
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   156
	#stopped        stopped from execution; an interrupt will
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   157
			NOT return it into the run state (for debugging)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   158
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   159
	#debug          debugger sitting on top of the processes
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   160
			stack.
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   161
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   162
    Win32 only:
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   163
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   164
	#osWait         waiting on an OS-API call to finish.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   165
			can be interrupted, terminated and aborted
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   166
			(i.e. the usual context actions are is possible).
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   167
16563
Claus Gittinger <cg@exept.de>
parents: 16562
diff changeset
   168
	#halted         thread was caught while in a blocking API call
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   169
			or primitive endless loop and has been halted by
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   170
			the scheduler.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   171
			Can only be resumed or hard-terminated - abort
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   172
			or soft terminate or unwind actions are not possible.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   173
			(due to win32 limitations)
3784
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   174
181c246ea421 comment
Claus Gittinger <cg@exept.de>
parents: 3783
diff changeset
   175
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   176
    [Instance variables:]
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   177
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   178
	id                     <SmallInteger>   a unique process-id
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
	creatorId              <SmallInteger>   the id of the process that
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   181
						created me (useful for debugging
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   182
						or monitoring).
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
   183
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   184
	processGroupId                          usually the id of the creator,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   185
						unless the process detached from
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   186
						the group and became a groupLeader.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   187
						Groups can be easily terminated
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   188
						as a whole.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   189
						Group leaders have a groupId of nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   190
						A groupId of 0 (zero) marks a system
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   191
						process; these do not prevent a standAlone
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   192
						app from exiting.
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
   193
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   194
	prio                   <SmallInteger>   the processes priority
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   195
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   196
	priorityRange          <Interval>       the processes dynamic priority range
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   197
						(or nil)
3723
141777110a64 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3679
diff changeset
   198
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   199
	state                  <Symbol>         the processes state
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   200
						(for process-monitor)
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   201
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   202
	startBlock             <Block>          the startup-block (the one that forked)
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
	name                   <String-or-nil>  the processes name (if any)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   205
						(for process-monitor)
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   206
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   207
	suspendSemaphore       <Semaphore>      triggered when suspend (if nonNil)
217
a0400fdbc933 *** empty log message ***
claus
parents: 213
diff changeset
   208
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   209
	restartable            <Boolean>        is restartable; if true, the process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   210
						will be restarted when an image is
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   211
						restarted. Otherwise, it remains dead.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   212
						Running processes cannot be continued
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   213
						at the point where leftOff after an
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   214
						image-restart.
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   215
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   216
	interruptActions       <Collection>     interrupt actions as defined by interruptWith:,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   217
						performed at interrupt time
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   218
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   219
	exitActions            <Collection of Block>
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   220
						additional cleanup actions to perform
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   221
						on termination (if nonEmpty)
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   222
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   223
	emergencySignalHandler <Block>          can be used for per-process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   224
						emergency signal handling
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   225
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   226
	interruptsDisabled     <Boolean>        flag if interrupts (as installed
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   227
						via #interruptWith:) are currently
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   228
						disabled. (i.e. on-hold).
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   229
						Interrupts will be delivered when
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   230
						reenabled.
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   231
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   232
	exceptionHandlerSet    <ExceptionhandlerSet>
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   233
						Handled by any process; allows for
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   234
						exceptionHandlers and query-answerers to
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   235
						be added/removed dynamically.
4646
8103e1cbce8a added exceptionHandlerSet & corresponding docu
Claus Gittinger <cg@exept.de>
parents: 4522
diff changeset
   236
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   237
    [Class variables:]
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   238
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   239
	TerminateSignal         <Signal>        signal used to terminate processes
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   240
						(should not be caught - or at least
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   241
						 rejected in handlers).
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   242
						If caught and proceeded, a process
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   243
						cannot be terminated via #terminate.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   244
						For hardTermination (in case of emergency),
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   245
						send it a #erminateNoSignal message.
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
   246
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   247
	RestartSignal           <Signal>        signal used to restart a process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   248
						Can be caught in additional handler(s),
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   249
						to perform all kind of re-initialization.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   250
						However, these handlers should reject,
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   251
						for the restart to be really performed.
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   252
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   253
    [see also:]
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   254
	ProcessorScheduler
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   255
	Block
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   256
	Sempahore SemaphoreSet Delay SharedQueue
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   257
	WindowGroup
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   258
	(``Working with processes'': programming/processes.html)
1273
f8449f53a6a3 commentary
Claus Gittinger <cg@exept.de>
parents: 1165
diff changeset
   259
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   260
    [author:]
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   261
	Claus Gittinger
1294
e26bbb61f6b2 documentation
Claus Gittinger <cg@exept.de>
parents: 1273
diff changeset
   262
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   263
"
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   264
!
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   265
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   266
examples
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   267
"
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   268
    start a background process, computing 1000 factorial 100 times;
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   269
    the processes priority is set to not disturb any interactive process.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   270
    Since its prio is higher than the 3D animation demos prio, you will notice,
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   271
    that those are suspended while the computation runs. But Interactive views
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   272
    (like browsers) will continue to react normal.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   273
									[exBegin]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   274
    [
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   275
       'starting' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   276
       100 timesRepeat:[1000 factorial].
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   277
       'done with factorial' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   278
    ] forkAt:(Processor userBackgroundPriority).
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   279
									[exEnd]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   280
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   281
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   282
    start a background process, computing 1000 factorial 100 times;
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   283
    the processes priority is set to not disturb any process.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   284
    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
   285
    the 3D animation demos also continue to run.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   286
									[exBegin]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   287
    [
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   288
       'starting' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   289
       100 timesRepeat:[1000 factorial].
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   290
       'done with factorial' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   291
    ] forkAt:1.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   292
									[exEnd]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   293
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   294
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   295
    start a background process, reading a pipe without blocking other
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   296
    processes;
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   297
									[exBegin]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   298
    [
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   299
       |p|
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   300
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   301
       'starting' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   302
       p := PipeStream readingFrom:'ls -lR .'.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   303
       [p atEnd] whileFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   304
	   p readWait.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   305
	   p nextLine printNL.
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   306
       ].
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   307
       p close.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   308
       'done with pipe' printNL.
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   309
    ] forkAt:1.
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   310
									[exEnd]
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   311
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   312
    see more examples in doc/coding
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   313
    (or search in the browser for senders of fork*)
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   314
"
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
   315
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   316
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   317
!Process class methodsFor:'initialization'!
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   318
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   319
initialize
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   320
    TerminateSignal isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   321
	TerminateSignal := TerminateProcessRequest.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   322
	TerminateSignal notifierString:'unhandled process termination'.
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   323
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   324
	RestartSignal := RestartProcessRequest.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   325
	RestartSignal notifierString:'unhandled process restart'.
302
1f76060d58a4 *** empty log message ***
claus
parents: 252
diff changeset
   326
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
   327
	CaughtSignals := SignalSet
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   328
			    with:AbortAllOperationRequest
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   329
			    with:TerminateProcessRequest
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   330
			    with:RestartProcessRequest.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   331
    ]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   332
6212
65624195f937 exceptions now class-based
Claus Gittinger <cg@exept.de>
parents: 6204
diff changeset
   333
    "Modified: / 17.11.2001 / 11:07:29 / cg"
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   334
! !
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   335
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   336
!Process class methodsFor:'instance creation'!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   337
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   338
for:aBlock priority:aPrio
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   339
    "create a new (unscheduled) process which will execute aBlock at
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   340
     a given priority, once scheduled. The process will start execution once
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   341
     it gets a #resume-message."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   342
2268
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   343
    ^ self basicNew for:aBlock priority:aPrio
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   344
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   345
    "Modified: 25.1.1997 / 01:23:12 / cg"
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
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   348
new
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   349
    "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
   350
     method, when scheduled. The process will start execution once
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   351
     it gets a #resume-message."
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   352
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
   353
    ^ self basicNew for:nil priority:(Processor activePriority).
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
    "Created: 25.1.1997 / 01:31:05 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   356
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   357
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   358
!Process class methodsFor:'Signal constants'!
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   359
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   360
restartSignal
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   361
    "return the signal used for process restart"
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   362
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
   363
    ^ RestartSignal
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
    "Created: 28.10.1996 / 20:26:50 / cg"
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
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   368
terminateSignal
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   369
    "return the signal used for process termination"
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
   370
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   371
    ^ TerminateSignal
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   372
! !
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
   373
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   374
!Process class methodsFor:'defaults'!
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   375
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   376
defaultMaximumStackSize
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   377
    "return the default max stack size. All new processes get
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   378
     this limit initially.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   379
     It may be changed for individual processes with:
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   380
	aProcess setMaximumStackSize:limit"
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   381
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   382
%{  /* NOCONTEXT */
19293
81e42b6626fb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19292
diff changeset
   383
    extern INT __defaultThreadMaxStackSize();
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   384
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8877
diff changeset
   385
    RETURN ( __mkSmallInteger( __defaultThreadMaxStackSize() ));
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   386
%}
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
     Process defaultMaximumStackSize
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   390
    "
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
    "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
   393
!
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
defaultMaximumStackSize:numberOfBytes
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   396
    "set the default max stack size, return the previous value.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   397
     All new processes get this stack limit initially.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   398
     It may be changed for individual processes with:
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   399
	aProcess setMaximumStackSize:limit
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   400
     Notice:
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   401
	There is seldom any need to change the default setting,
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   402
	except for highly recursive programs."
1346
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   403
429d560b7013 allow access to the default stack limit
Claus Gittinger <cg@exept.de>
parents: 1316
diff changeset
   404
%{  /* NOCONTEXT */
19293
81e42b6626fb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19292
diff changeset
   405
    extern INT __threadSetDefaultMaxStackSize();
1346
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)) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
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
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   420
    "return the wrap stack size.
19292
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
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   429
#ifdef __win32__
19292
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
19295
df293bd0c3f0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19294
diff changeset
   434
    RETURN (__MKINT(sz));
19292
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
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   439
    "set the wrap stack size.
19292
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)) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   450
	INT __newSize = __intVal(newSize);
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   451
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   452
	if (__newSize >= 0) {
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   453
#ifdef __win32__
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   454
	    extern INT __setWrapStackSize(INT);
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   455
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   456
	    __oldSize = __setWrapStackSize(__newSize);
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   457
#endif
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   458
	}
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
   459
    }
19295
df293bd0c3f0 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19294
diff changeset
   460
    RETURN (__MKINT(__oldSize));
19292
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
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
   619
    "return the receiver's priority"
818
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 */
19294
c28bb1e37444 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19293
diff changeset
   834
    extern INT __threadMaxStackSize();
699
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))) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   838
	RETURN( __MKINT(__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 */
19294
c28bb1e37444 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19293
diff changeset
   851
    extern INT __threadSetMaxStackSize(int, unsigned INT);
699
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) ) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   856
	RETURN ( __MKINT(__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 */
19294
c28bb1e37444 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19293
diff changeset
   867
    extern INT __threadSetJunkSizes(int, unsigned INT, unsigned INT, unsigned INT);
19296
b0f995007c66 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19295
diff changeset
   868
712
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   869
    OBJ i;
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   870
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   871
    if (__isSmallInteger(i = __INST(id))
712
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   872
     && __isSmallInteger(initial)
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   873
     && __isSmallInteger(increment)
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   874
     && __isSmallInteger(safe)) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
   875
	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
   876
    }
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   877
%}.
40906c842cd2 added entry to control a processes stack allocation
Claus Gittinger <cg@exept.de>
parents: 699
diff changeset
   878
    ^ false
699
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   881
!Process methodsFor:'interrupts'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   882
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   883
addInterruptAction:aBlock
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   884
    "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
   885
     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
   886
     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
   887
5490
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   888
    |wasBlocked|
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   889
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   890
    wasBlocked := OperatingSystem blockInterrupts.
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   891
    interruptActions isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   892
	interruptActions := OrderedCollection with:aBlock.
5490
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   893
    ] ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   894
	interruptActions addFirst:aBlock.
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   895
    ].
5490
38880aca9320 race when manipulating interruptActions
Claus Gittinger <cg@exept.de>
parents: 5450
diff changeset
   896
    wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   897
!
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   898
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   899
blockInterrupts
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   900
    "disable interrupt processing for the receiver process
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   901
     - 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
   902
     soon as interrupts are reenabled via unblockInterrupts.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   903
     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
   904
     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
   905
     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
   906
     This is similar to OperatingSystem>>blockInterrupts, but only
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   907
     affects interrupts for the receiver process
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   908
     (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
   909
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   910
    |disabledBefore|
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   911
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   912
    disabledBefore := interruptsDisabled.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   913
    interruptsDisabled := true.
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   914
    ^ disabledBefore ? false
2726
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
    "
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   917
     |p1|
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   918
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   919
     p1 := [
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   920
	     Transcript showCR:'disabled ...'.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   921
	     Transcript showCR:Processor activeProcess blockInterrupts.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   922
	     Transcript showCR:'busy ...'.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   923
	     Delay waitForSeconds:10.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   924
	     Transcript showCR:'enabled ...'.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   925
	     Processor activeProcess unblockInterrupts.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   926
	   ] forkAt:9.
2726
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   927
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   928
     p1 interruptWith:[Transcript showCR:'interrupted'].
d54c86279d2b *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2725
diff changeset
   929
    "
2725
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   930
!
f5419dbc5f32 allow thread interrupts to be disabled/enabled
Claus Gittinger <cg@exept.de>
parents: 2724
diff changeset
   931
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   932
evaluateInterruptActionsWithContext:aContext
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   933
    "evaluate my interrupt-actions."
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   934
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   935
    |action wasBlocked|
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   936
8544
732ed0a3d7ca use #~~ instead of #> for speed
Stefan Vogel <sv@exept.de>
parents: 8495
diff changeset
   937
    [interruptActions size ~~ 0] whileTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   938
	wasBlocked := OperatingSystem blockInterrupts.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   939
	action := interruptActions removeFirst.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   940
	interruptActions size == 0 ifTrue:[ interruptActions := nil ].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   941
	wasBlocked ifFalse:[OperatingSystem unblockInterrupts].
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   942
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   943
	action valueWithOptionalArgument:aContext
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   944
    ].
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   945
!
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   946
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   947
forceInterruptOnReturnOf:aContext
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   948
    "helper entry for debugger. Force a stepInterrupt whenever aContext
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   949
     returns either directly or via an unwind."
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   950
1728
827231681803 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1531
diff changeset
   951
    aContext markForInterruptOnUnwind.
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   952
%{
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   953
    OBJ i;
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   954
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
   955
    if (__isSmallInteger(i = __INST(id))) {
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   956
	__threadContextStepInterrupt(__intVal(i), 1);
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   957
    }
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   958
%}
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
   959
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   960
!
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
   961
5491
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   962
hasInterruptActions
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   963
    "return true, if there are any interrupt actions to evaluate
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   964
     (i.e. if the receiver has been interrupted)."
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   965
8544
732ed0a3d7ca use #~~ instead of #> for speed
Stefan Vogel <sv@exept.de>
parents: 8495
diff changeset
   966
    ^ interruptActions size ~~ 0
5491
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   967
!
Claus Gittinger <cg@exept.de>
parents: 5490
diff changeset
   968
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   969
interrupt
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   970
    "evaluate my interrupt-actions.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   971
     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
   972
     after doing this."
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   973
6322
8e6d732fda15 refactored
Claus Gittinger <cg@exept.de>
parents: 6219
diff changeset
   974
    self evaluateInterruptActionsWithContext:thisContext sender
699
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   977
interruptWith:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
   978
    "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
   979
     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
   980
     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
   981
     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
   982
     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
   983
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   984
    Processor activeProcess == self ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   985
	aBlock value
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   986
    ] ifFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   987
	self addInterruptAction:aBlock.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
   988
	Processor scheduleForInterrupt:self.
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   989
    ]
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
   990
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
   991
    "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
   992
!
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   993
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   994
interruptedIn:aContext
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
   995
    "evaluate my interrupt-actions.
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   996
     This is indirectly called by the VM, when some #interruptWith: action
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   997
     was scheduled for the process, and the process is resumed.
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   998
     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
   999
2727
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1000
    "/ the returned value here has a subtle effect:
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1001
    "/ if false, the interrupt is assumed to be not taken,
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1002
    "/ and will be redelivered.
853b7910cff2 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2726
diff changeset
  1003
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
  1004
    interruptsDisabled == true ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1005
	"/ no, I dont want interrupts right now;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1006
	"/ try again later.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1007
	^ false
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
  1008
    ].
8613
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1009
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1010
    "/ 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
  1011
    "/ 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
  1012
"/    [
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1013
"/        interruptsDisabled := true.
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1014
	self evaluateInterruptActionsWithContext:aContext.
8613
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1015
"/    ] ensure:[
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1016
"/        interruptsDisabled := false.
b74b646a830b no, last change leads to a blocking Debugger
Claus Gittinger <cg@exept.de>
parents: 8591
diff changeset
  1017
"/    ].
2724
9fb9ea4bf858 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
  1018
    ^ true
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  1019
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  1020
    "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
  1021
    "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
  1022
!
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1023
1092
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1024
onResumeDo:aBlock
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1025
    "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
  1026
     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
  1027
     (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
  1028
     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
  1029
     when it awakes."
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1030
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1031
    self addInterruptAction:aBlock.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1032
    Processor scheduleInterruptActionsOf:self.
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1033
2a8acc60f5b5 added mechanism for a block to be evaluated onResume
Claus Gittinger <cg@exept.de>
parents: 1086
diff changeset
  1034
    "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
  1035
    "Modified: 8.3.1996 / 13:01:21 / cg"
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1036
!
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1037
2857
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1038
stepInterruptHandler:anObject
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1039
    "set the handler for stepInterrupts occurring in the receiver process.
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1040
     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
  1041
     stepInterrupts. Returns the previous handler.
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1042
     Not for general use."
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1043
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1044
%{  /* NOCONTEXT */
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1045
    extern OBJ __threadStepInterruptHandler();
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1046
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1047
    RETURN( __threadStepInterruptHandler(anObject) );
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
!
2e9e294d679c allow setting the stepInterruptHandler
Claus Gittinger <cg@exept.de>
parents: 2845
diff changeset
  1050
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1051
unblockInterrupts
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1052
    "enable interrupt processing for the receiver process
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1053
     - if any interrupts are pending, these will be handled immediately.
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1054
     When unblocking interrupts, take care of nested block/unblock
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1055
     calls - you should only unblock after a blockcall if they where
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1056
     really not blocked before.
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1057
     This is similar to OperatingSystem>>unblockInterrupts, but only
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1058
     affects interrupts for the receiver process
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1059
     (i.e. those which are installed via #interruptWith:)"
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1060
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1061
    interruptsDisabled := false.
8544
732ed0a3d7ca use #~~ instead of #> for speed
Stefan Vogel <sv@exept.de>
parents: 8495
diff changeset
  1062
    interruptActions size ~~ 0 ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1063
	Processor activeProcess == self ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1064
	    self interrupt
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1065
	]
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1066
    ]
699
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1069
!Process methodsFor:'monitoring'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1070
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1071
numberOfStackBoundaryHits
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1072
    "internal monitoring only - will vanish"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1073
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1074
%{  /* NOCONTEXT */
19294
c28bb1e37444 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19293
diff changeset
  1075
    extern INT __threadNumberOfStackBoundaryHits();
c28bb1e37444 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19293
diff changeset
  1076
    INT n;
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1077
    OBJ i;
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1078
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1079
    if (__isSmallInteger(i = __INST(id))) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1080
	n = __threadNumberOfStackBoundaryHits(__intVal(i));
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1081
	n &= _MAX_INT;
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1082
	RETURN( __mkSmallInteger(n) );
699
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
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1085
    ^ nil
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1088
numberOfStackSegments
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1089
    "return the processes number of stack segments currently used.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1090
     This method is for monitoring purposes only - it may vanish."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1091
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1092
%{  /* NOCONTEXT */
19297
674bdfe7b7ed #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19296
diff changeset
  1093
    extern int __threadStackSegments();
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1094
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1095
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1096
    if (__isSmallInteger(i = __INST(id))) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1097
	RETURN( __mkSmallInteger((INT)__threadStackSegments(__intVal(i))) );
699
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
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1100
    ^ nil
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1103
totalStackSize
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1104
    "return the processes maximum used stack size.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1105
     This method is for monitoring purposes only - it may vanish."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1106
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1107
%{  /* NOCONTEXT */
19294
c28bb1e37444 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19293
diff changeset
  1108
    extern INT __threadTotalStackSize();
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1109
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1110
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1111
    if (__isSmallInteger(i = __INST(id))) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1112
	RETURN( __MKINT(__threadTotalStackSize(__intVal(i))) );
699
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
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1115
    ^ nil
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1118
usedStackSize
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1119
    "Return the processes current stack size.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1120
     This method is for monitoring purposes only - it may vanish."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1121
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1122
%{  /* NOCONTEXT */
14724
03fbc7b1d07e 64bit fix
Claus Gittinger <cg@exept.de>
parents: 14722
diff changeset
  1123
    extern unsigned INT __threadUsedStackSize();
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1124
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1125
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1126
    if (__isSmallInteger(i = __INST(id))) {
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1127
	RETURN( __MKINT(__threadUsedStackSize(__intVal(i))) );
699
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
%}.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1130
    ^ nil
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1133
vmTrace:aBoolean
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1134
    "turn on/off VM message tracing for the receiver.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1135
     This is meant for ST/X debugging, and may vanish.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1136
     Expect lots of output, once this is turned on."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1137
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1138
%{  /* NOCONTEXT */
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1139
    OBJ i;
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1140
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1141
    if (__isSmallInteger(i = __INST(id))) {
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1092
diff changeset
  1142
	__threadTracing(__intVal(i), aBoolean);
699
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
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1146
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1147
!Process methodsFor:'obsolete'!
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1148
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1149
exitAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1150
    "Obsoleted by addExitAction: / removeAllExitActions.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1151
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1152
     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
  1153
     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
  1154
     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
  1155
5870
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1156
    <resource:#obsolete>
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1157
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1158
    self obsoleteMethodWarning:'use addExitAction: / removeAllExitActions'.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1159
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1160
    aBlock isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1161
	^ self removeAllExitActions.
2158
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
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1164
    ^ self addExitAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1165
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1166
    "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
  1167
    "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
  1168
!
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1169
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1170
suspendAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1171
    "Obsoleted by addSuspendAction: / removeAllSuspendActions.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1172
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1173
     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
  1174
     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
  1175
     A nil argument removes all suspendActions."
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1176
5870
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1177
    <resource:#obsolete>
0d87233b9e16 Use <resource:#obsolete>
Stefan Vogel <sv@exept.de>
parents: 5812
diff changeset
  1178
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1179
    self obsoleteMethodWarning:'use addSuspendAction: / removeAllSuspendActions'.
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1180
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1181
    aBlock isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1182
	^ self removeAllSuspendActions.
2158
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
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1185
    ^ self addSuspendAction:aBlock
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1186
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1187
    "Modified: 12.1.1997 / 00:38:22 / cg"
9361
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
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1190
terminateAllSubprocesses
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1191
    <resource:#obsolete>
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1192
    self obsoleteMethodWarning:'use #terminateAllSubprocessesInGroup'.
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1193
    self terminateAllSubprocessesInGroup.
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
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1196
terminateWithAllSubprocesses
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1197
    <resource:#obsolete>
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1198
    self obsoleteMethodWarning:'use #terminateWithAllSubprocessesInGroup'.
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1199
    self terminateWithAllSubprocessesInGroup.
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1200
! !
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1201
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1202
!Process methodsFor:'printing & storing'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1203
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1204
printOn:aStream
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1205
    "a little more info in my printed representation"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1206
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1207
    aStream nextPutAll:state article;
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1208
	    space;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1209
	    nextPutAll:state;
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1210
	    nextPutAll:' Process (';
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1211
	    nextPutAll:self nameOrId.
6944
491b35cf0bf3 printString changed to include id
Claus Gittinger <cg@exept.de>
parents: 6784
diff changeset
  1212
    name notNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1213
	aStream
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1214
	    nextPutAll:', id=';
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1215
	    nextPutAll:id printString.
6944
491b35cf0bf3 printString changed to include id
Claus Gittinger <cg@exept.de>
parents: 6784
diff changeset
  1216
    ].
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1217
    aStream
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1218
	    nextPutAll:')'
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1219
! !
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1220
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1221
!Process methodsFor:'private'!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1222
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1223
for:aBlock priority:aPrio
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1224
    "setup the new process - the receiver is not scheduled for
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1225
     execution, to get it running, send it #resume"
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1226
339
claus
parents: 337
diff changeset
  1227
    |nm active|
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1228
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1229
    prio := aPrio.
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1230
    startBlock := aBlock.
339
claus
parents: 337
diff changeset
  1231
    restartable := false.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1232
10436
2782fa4bd45a #newProcess et al never return nil - but raise an exception
Stefan Vogel <sv@exept.de>
parents: 9361
diff changeset
  1233
    Processor newProcessFor:self.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1234
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1235
    "
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1236
     give me a user-friendly name
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1237
    "
339
claus
parents: 337
diff changeset
  1238
    active := Processor activeProcess.
2268
e7e1f98c3bce allow Process new (for subclasses)
Claus Gittinger <cg@exept.de>
parents: 2262
diff changeset
  1239
    (nm := active name) notNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1240
	"
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1241
	 avoid name inflation
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1242
	"
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1243
	(nm endsWith:' sub') ifFalse:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1244
	    nm := nm , ' [' ,  active id printString , '] sub'
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1245
	].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1246
	name := nm
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
  1247
    ].
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1248
    creatorId := active id.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1249
    processGroupId := active processGroupId.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1250
    (processGroupId isNil or:[processGroupId == 0]) ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1251
	processGroupId := creatorId.
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1252
    ].
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1253
4880
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1254
    "/ since groupId is used to detect a systemProcess (0),
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1255
    "/ do not allow a 0 here; need an explicit beSystemProcess.
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1256
    processGroupId == 0 ifTrue:[processGroupId := nil].
1529
0ba3d19f90d6 set the processGroupId when created
Claus Gittinger <cg@exept.de>
parents: 1524
diff changeset
  1257
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1258
    "Modified: 25.1.1997 / 01:28:54 / cg"
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1259
! !
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1260
7257
b9f0fb923c72 method category rename
Claus Gittinger <cg@exept.de>
parents: 6944
diff changeset
  1261
!Process methodsFor:'private-scheduler access'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1262
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1263
setId:idNumber state:stateSymbol
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1264
    "set id and state - not for public use"
375
claus
parents: 359
diff changeset
  1265
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1266
    id := idNumber.
4880
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1267
    creatorId := 0.
c87bf6d60fe2 oops - processGroup==0 marks a systemProcess.
ca
parents: 4877
diff changeset
  1268
    processGroupId := nil.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1269
    state := stateSymbol.
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1270
    singleStepping isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1271
	singleStepping := false
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1272
    ].
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1273
    restartable isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1274
	restartable := false
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1275
    ].
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1276
    interruptsDisabled isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1277
	interruptsDisabled := false
8787
6539f06fbac0 *** empty log message ***
penk
parents: 8707
diff changeset
  1278
    ].
1844
66d98c3a96f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1839
diff changeset
  1279
66d98c3a96f7 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1839
diff changeset
  1280
    "Modified: 30.10.1996 / 00:35:29 / cg"
182
f531860566fc more queries
claus
parents: 159
diff changeset
  1281
!
f531860566fc more queries
claus
parents: 159
diff changeset
  1282
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1283
setPriority:aNumber
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1284
    "set priority without telling processor - not for public use"
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1285
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1286
    prio := aNumber
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1287
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1288
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1289
setStartBlock:aBlock
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  1290
    "set the receiver's startup block"
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1291
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1292
    startBlock := aBlock
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1293
!
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1294
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1295
setStateTo:newState if:oldState
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1296
    state == oldState ifTrue:[state := newState]
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1297
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1298
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1299
setStateTo:newState if:oldState1 or:oldState2
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1300
    (state == oldState1 or:[state == oldState2]) ifTrue:[state := newState]
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1301
! !
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1302
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1303
!Process methodsFor:'queries'!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1304
5397
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1305
isActive
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1306
    "return true if I am the active process"
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1307
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1308
    ^ Processor activeProcess == self
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1309
!
24e1061d3452 Define #isActive
Stefan Vogel <sv@exept.de>
parents: 5377
diff changeset
  1310
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1311
isDead
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1312
    "return true, if the receiver is a dead process"
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1313
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1314
    ^ (id isNil or:[state isNil or:[state == #dead]])
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1315
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1316
    "Modified: 23.12.1995 / 18:35:29 / cg"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1317
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1318
14359
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1319
isDebugged
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1320
    "return true, iff the receiver process is currently being debugged
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1321
     (i.e. is stopped and a debugger sits on top of it)"
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1322
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1323
    ^ (state == #debug)
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1324
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1325
    "Created: / 26-09-2012 / 14:56:36 / cg"
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1326
!
794447210c24 added: #isDebugged
Claus Gittinger <cg@exept.de>
parents: 13563
diff changeset
  1327
4874
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1328
isGUIProcess
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1329
    "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
  1330
     I.e. a windowGroup process.
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1331
     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
  1332
     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
  1333
     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
  1334
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1335
    ^ processType == #gui
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1336
!
2af584ce2793 added a processType attribute (for beGUI / isGUI)
Claus Gittinger <cg@exept.de>
parents: 4735
diff changeset
  1337
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1338
isRestartable
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1339
    "return true, iff the receiver is restartable"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1340
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1341
    ^ restartable
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
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1344
isSingleStepping
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1345
    ^ singleStepping
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1346
!
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1347
5643
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1348
isStopped
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1349
    "return true, iff the receiver is stopped"
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1350
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1351
    ^ (state == #stopped)
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1352
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1353
    "Modified: 23.12.1995 / 18:35:29 / cg"
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1354
!
0fe1ec12c5e8 added #isStopped
Claus Gittinger <cg@exept.de>
parents: 5592
diff changeset
  1355
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1356
isSystemProcess
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1357
    "return true if aProcess is a system process,
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1358
     which should not be suspended/terminated etc.."
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1359
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1360
    ^ (Processor isPureEventDriven
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1361
       or:[id == 0
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1362
       or:[processGroupId == 0
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1363
       or:[(Display notNil and:[Display dispatchProcess == self])
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1364
       ]]])
2636
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
    "
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1367
     Processor activeProcessIsSystemProcess
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
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1370
    "Created: 17.4.1997 / 12:57:37 / stefan"
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1371
!
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1372
17407
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1373
isUserProcess
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1374
    "return true if aProcess is a user process."
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1375
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1376
    ^ processGroupId ~~ 0 and:[id ~~ 0]
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1377
!
e82159e43f55 class: Process
Stefan Vogel <sv@exept.de>
parents: 17244
diff changeset
  1378
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1379
nameOrId
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1380
    "return a string to identify the process - either name or id"
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1381
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1382
    name notNil ifTrue:[^ name].
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1383
    ^ id printString
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1384
!
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1385
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1386
parentProcess
17244
2d730416819c class: Process
Claus Gittinger <cg@exept.de>
parents: 16846
diff changeset
  1387
    "answer my parent.
2d730416819c class: Process
Claus Gittinger <cg@exept.de>
parents: 16846
diff changeset
  1388
     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
  1389
     referenced (and therefore not garbage collected if it terminates)"
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1390
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1391
    ProcessorScheduler knownProcessesDo:[:p|
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1392
	p id = creatorId ifTrue:[^ p].
14443
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1393
    ].
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1394
    ^ nil.
9361
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
    "
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1397
      Processor activeProcess parentProcess
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1398
    "
14443
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1399
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1400
    "Modified: / 26-10-2012 / 13:15:55 / cg"
9361
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1401
!
4538fc85ea19 new: #parentProcess
Stefan Vogel <sv@exept.de>
parents: 9300
diff changeset
  1402
5675
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1403
processGroupLeader
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1404
    "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
  1405
5681
95c1ed5be6c3 Fix #processGroupLeader
Stefan Vogel <sv@exept.de>
parents: 5675
diff changeset
  1406
    |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
  1407
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1408
    processes := ProcessorScheduler knownProcesses.
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1409
    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
  1410
    leader isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1411
	leader := self.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1412
	[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1413
	    creatorId := leader creatorId.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1414
	    next := processes detect:[:p| p id = creatorId
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1415
					  and:[p processGroupId = processGroupId]]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1416
			      ifNone:nil.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1417
	] 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
  1418
    ].
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1419
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1420
    ^ leader.
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
    "
34d5b32f9259 Do not create a new process group for each grandchild process.
Stefan Vogel <sv@exept.de>
parents: 5643
diff changeset
  1423
      Processor activeProcess processGroupLeader
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1424
    "
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  1425
! !
818
dce34af5a40f category changes
Claus Gittinger <cg@exept.de>
parents: 772
diff changeset
  1426
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1427
!Process methodsFor:'special'!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1428
15964
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1429
externalLookupPopIfEqual: lookupObject
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1430
    "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
  1431
     to cleanup lookup stack"
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1432
    lookupActivations first == lookupObject ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1433
	lookupActivations := lookupActivations second.
15964
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
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1436
    "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
  1437
    "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
  1438
!
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  1439
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1440
millisecondDelay:millis
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1441
    "suspend the current process for some time.
16846
60b0b8de3c25 class: Process
Claus Gittinger <cg@exept.de>
parents: 16563
diff changeset
  1442
     Attention:
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1443
	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
  1444
	this blocks the whole Smalltalk for the time delta;
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1445
	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
  1446
2636
8cb50e1b0688 Move #isSystemProcess from ProcessorScheduler to Process.
Stefan Vogel <sv@exept.de>
parents: 2384
diff changeset
  1447
    (self isSystemProcess) ifTrue:[
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1448
	OperatingSystem millisecondDelay:millis
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1449
    ] ifFalse:[
17544
486f5796b42e unused variable removed
Claus Gittinger <cg@exept.de>
parents: 17407
diff changeset
  1450
	Delay waitForMilliseconds:millis
772
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
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1453
    "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
  1454
    "Modified: 17.4.1997 / 13:02:25 / stefan"
772
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1455
!
f86b117950c5 non-blocking/blocking millisecondDelay added
Claus Gittinger <cg@exept.de>
parents: 759
diff changeset
  1456
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1457
trapRestrictedMethods:trap
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1458
    "Allow/deny the execution of restricted methods.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1459
     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
  1460
     redirected to ObjectMemory and causes a system wide restriction.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1461
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1462
     Notice: method restriction is a nonstandard feature, not supported
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1463
     by other smalltalk implementations and not specified in the ANSI spec.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1464
     This is EXPERIMENTAL - and being evaluated for usability.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1465
     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
  1466
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1467
    ^ObjectMemory trapRestrictedMethods:trap
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
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1470
	Processor activeProcess trapRestrictedMethods:true
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1471
	Processor activeProcess trapRestrictedMethods:false
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1474
    "Created: 8.11.1995 / 19:45:04 / stefan"
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1477
uninterruptablyDo:aBlock
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1478
    "execute aBlock with interrupts blocked.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1479
     This does not prevent preemption by a higher priority processes
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1480
     if any becomes runnable due to the evaluation of aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1481
     (i.e. if a semaphore is signalled there)."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1482
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1483
    "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
  1484
    (OperatingSystem blockInterrupts) ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1485
	"/ already blocked
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1486
	^ aBlock value
2302
259d1b9326ed in uninterruptablyDo::
Claus Gittinger <cg@exept.de>
parents: 2268
diff changeset
  1487
    ].
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1488
6421
58dca33cf0fc #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 6322
diff changeset
  1489
    ^ aBlock ensure:[OperatingSystem unblockInterrupts]
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1490
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1491
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1492
waitUntilSuspended
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1493
    "wait until the receiver is suspended."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1494
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1495
    self isDead ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1496
	[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1497
	    "/ must check again - interrupt could have happened
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1498
	    "/ and process already terminated.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1499
	    self isDead ifFalse:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1500
		suspendSemaphore isNil ifTrue:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1501
		    suspendSemaphore := Semaphore new name:'process suspend'
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1502
		].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1503
		suspendSemaphore wait
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1504
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1505
	] valueUninterruptably
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1506
    ]
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1507
1946
370f57e569dc oops - race in waitUntilSuspended & waitUntilTerminated
Claus Gittinger <cg@exept.de>
parents: 1844
diff changeset
  1508
    "Modified: 8.11.1996 / 23:05:24 / cg"
699
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1511
waitUntilTerminated
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1512
    "wait until the receiver is terminated.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1513
     This method allows another process to wait till the receiver finishes."
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1514
6774
6711472e6df4 oops - waitUntil terminated for a process that did not rune
penk
parents: 6739
diff changeset
  1515
    self waitUntilTerminatedWithTimeout:nil
1033
244530001e84 care to reenable interrupts
Claus Gittinger <cg@exept.de>
parents: 1000
diff changeset
  1516
1789
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1517
    "
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1518
     |p|
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1519
6774
6711472e6df4 oops - waitUntil terminated for a process that did not rune
penk
parents: 6739
diff changeset
  1520
     p := [100 timesRepeat:[1000 factorial]] forkAt:4.
1789
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1521
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1522
     Transcript showCR:'now waiting ...'.
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1523
     p waitUntilTerminated.
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1524
     Transcript showCR:'done.'
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1525
    "
16798944c715 commentary
Claus Gittinger <cg@exept.de>
parents: 1784
diff changeset
  1526
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1527
    "Modified: 12.1.1997 / 00:40:59 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1528
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1529
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1530
waitUntilTerminatedWithTimeout:secondsOrNil
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1531
    "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
  1532
     the time period exired.
13206
bffd4afb5be0 comment/format in: #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 13016
diff changeset
  1533
     Returns true if a timeout occurred.
8566
a8101fa70c6c comment
Stefan Vogel <sv@exept.de>
parents: 8544
diff changeset
  1534
     This method allows another process to wait until the receiver finishes
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1535
     (optionally) within some time."
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1536
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1537
    |sema didTimeout|
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1538
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1539
    didTimeout := false.
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1540
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1541
    self isDead ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1542
	[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1543
	    "/ must check again - interrupt could have happened
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1544
	    "/ and process already terminated.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1545
	    self isDead ifFalse:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1546
		sema := Semaphore new name:'process termination'.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1547
		self addExitAction:[sema signal].
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1548
		didTimeout := (sema waitWithTimeout:secondsOrNil) isNil
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1549
	    ]
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1550
	] valueUninterruptably.
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1551
    ].
10553
297602960627 #isDead
Stefan Vogel <sv@exept.de>
parents: 10502
diff changeset
  1552
    ^ didTimeout
4735
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
    "
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1555
     |p|
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1556
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1557
     p := [10 timesRepeat:[10000 factorial]] forkAt:4.
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1558
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1559
     Transcript showCR:'now waiting ...'.
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1560
     (p waitUntilTerminatedWithTimeout:2) ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1561
	 Transcript showCR:'timeout occurred.'
4735
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
    "
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1564
13206
bffd4afb5be0 comment/format in: #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 13016
diff changeset
  1565
    "Modified: / 13-01-2011 / 13:45:08 / cg"
4735
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1566
!
f4aad6d584d1 added #waitUntilTerminatedWithTimeout:
Claus Gittinger <cg@exept.de>
parents: 4646
diff changeset
  1567
9059
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1568
withHigherPriorityDo:aBlock
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1569
    "execute aBlock at a higher priority."
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1570
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1571
    ^ self withPriority:(prio + 1) do:aBlock
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
    "
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1574
     Processor activeProcess withHigherPriorityDo:[3000 factorial]
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
!
cc0a1250153f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9008
diff changeset
  1577
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1578
withLowerPriorityDo:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1579
    "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
  1580
     time-consuming operations at a more user-friendly priority."
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1581
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1582
    ^ self withPriority:(prio - 1) do:aBlock
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
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1585
     Processor activeProcess withLowerPriorityDo:[3000 factorial]
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1589
withPriority:aPrio do:aBlock
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1590
    "execute aBlock at another priority. This can be used to perform
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1591
     time-consuming operations at a more user-friendly priority,
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1592
     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
  1593
     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
  1594
     at 24)"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1595
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1596
    |oldprio|
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1597
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1598
    oldprio := prio.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1599
    self priority:aPrio.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1600
6421
58dca33cf0fc #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 6322
diff changeset
  1601
    ^ aBlock ensure:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1602
	self priority:oldprio
699
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
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1606
     Processor activeProcess withPriority:7 do:[3000 factorial]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1607
    "
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1608
    "be careful - even ^C wont work until done:
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1609
     Processor activeProcess withPriority:25 do:[3000 factorial]
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1610
    "
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1611
!
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1612
4433
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1613
withPriority:lowPrio to:highPrio do:aBlock
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1614
    "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
  1615
     time-consuming operations at a more user-friendly priority,
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1616
     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
  1617
     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
  1618
     at 24)"
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1619
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1620
    |oldprio oldRange|
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1621
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1622
    oldprio := prio.
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1623
    oldRange := priorityRange.
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1624
    self priorityRange:(lowPrio to:highPrio).
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1625
6421
58dca33cf0fc #valueNowOrOnUnwindDo: -> #ensure:
Claus Gittinger <cg@exept.de>
parents: 6322
diff changeset
  1626
    ^ aBlock ensure:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1627
	self priorityRange:oldRange.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1628
	self priority:oldprio.
4433
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
    "
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1632
     Processor activeProcess withPriority:7 to:8 do:[3000 factorial]
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
!
f367dc0b0a02 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4415
diff changeset
  1635
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1636
withSystemBackgroundPriorityDo:aBlock
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1637
    "execute aBlock at system background priority.
2839
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1638
     This can be used to perform
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1639
     background operations at a more user-friendly priority."
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1640
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1641
    ^ self withPriority:(Processor systemBackgroundPriority) do:aBlock
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
    "
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1644
     Processor activeProcess withSystemBackgroundPriorityDo:[3000 factorial]
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
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1647
    "Created: 7.8.1997 / 12:56:23 / cg"
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
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1650
withUserBackgroundPriorityDo:aBlock
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1651
    "execute aBlock at background priority. This can be used to perform
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1652
     time-consuming operations at a more user-friendly priority."
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1653
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1654
    ^ self withPriority:(Processor userBackgroundPriority) do:aBlock
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
    "
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1657
     Processor activeProcess withUserBackgroundPriorityDo:[3000 factorial]
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
22c472b4d24f added #withUserBackgroundPrioDo / #withSystemBackgroundPrioDo:
Claus Gittinger <cg@exept.de>
parents: 2727
diff changeset
  1660
    "Created: 6.8.1997 / 15:40:02 / cg"
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
  1661
! !
40ca7cc6fb9c *** empty log message ***
claus
parents: 182
diff changeset
  1662
5256
1209e167d63e category rename
Claus Gittinger <cg@exept.de>
parents: 5088
diff changeset
  1663
!Process methodsFor:'startup'!
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1664
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1665
imageRestart
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1666
    "restart the process from the beginning.
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1667
     This is sent by the ProcessorScheduler at image restart time,
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1668
     to all restartable processes."
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1669
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1670
    |savedGroupId|
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1671
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1672
"/  ('restart process ' , id printString) errorPrintNL.
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1673
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1674
    savedGroupId := processGroupId.
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1675
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1676
    (Processor newProcessFor:self withId:id) ifFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1677
	"for some reason, the Processor was unable to create
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1678
	 a VM process for me ...."
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1679
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1680
	('Process [warning]: process ' , id printString , ' failed to restart.') errorPrintCR.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1681
	^ nil
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1682
    ].
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1683
    processGroupId := savedGroupId.
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1684
    self resume
1086
7b0641a2e1ef nicer message
Claus Gittinger <cg@exept.de>
parents: 1033
diff changeset
  1685
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1686
    "Created: 28.10.1996 / 20:32:34 / cg"
2130
b9e7e1cf98bd newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1980
diff changeset
  1687
    "Modified: 10.1.1997 / 18:01:13 / cg"
1837
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
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1690
restart
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1691
    "restart the process from the beginning.
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1692
     This is only possible, if its restartable."
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1693
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1694
    restartable ifFalse:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1695
	^ self error:'process is not restartable' mayProceed:true
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1696
    ].
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1697
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1698
    self interruptWith:[RestartSignal raise]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1699
2158
aab75d6439d0 renamed exitAction: and suspendAction: messages - the old name
Claus Gittinger <cg@exept.de>
parents: 2130
diff changeset
  1700
    "Modified: 12.1.1997 / 00:54:32 / cg"
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1701
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1702
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1703
start
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1704
    "start the process - this is sent by the VM to the process to get
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1705
     the process up and running.
329
claus
parents: 326
diff changeset
  1706
     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
  1707
     allows more flexible handling of processes, since anything that responds
329
claus
parents: 326
diff changeset
  1708
     to #start can be handled transparently by the VM then ..."
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1709
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1710
    |block|
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1711
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1712
    (block := startBlock) notNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1713
	"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1714
	"/ just for your convenience ...
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1715
	"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1716
	name isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1717
	    name := '(' , block displayString , ')'
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1718
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1719
	restartable ~~ true ifTrue:[startBlock := nil].
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
	    "/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1723
	    "/ handle Process-Termination, Process-Restart and Abort
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1724
	    "/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1725
	    CaughtSignals handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1726
		ex creator == RestartProcessRequest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1727
		     ex restart
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1728
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1729
		ex return
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1730
	    ] do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1731
		exceptionHandlerSet isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1732
		    exceptionHandlerSet := ExceptionHandlerSet new.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1733
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1734
		"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1735
		"/ block is the one which received the fork some time ago...
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1736
		"/
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1737
		exceptionHandlerSet handleDo:block
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1738
	    ]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1739
	] ensure:[self terminateNoSignal].
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1740
    ] ifFalse:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1741
	"is this artificial restriction useful ?"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1742
	self error:'a process cannot be started twice' mayProceed:true
116
58fb8728e1a5 added emergencySignalHandler
claus
parents: 93
diff changeset
  1743
    ]
1475
e94168c99261 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1474
diff changeset
  1744
6219
6fbbd5e48b8f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6212
diff changeset
  1745
    "Modified: / 17.11.2001 / 16:45:32 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1746
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1747
7263
f814a5cfc333 method category rename
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  1748
!Process methodsFor:'suspend & resume'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1749
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1750
abort
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1751
    "raise an AbortOperationRequest in the receiver process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1752
     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
  1753
     (typically, some kind of event loop).
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1754
     If not handled, this will result in termination of the process."
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1755
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1756
    Processor activeProcess == self ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1757
	AbortOperationRequest raiseRequest
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1758
    ] ifFalse:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1759
	self interruptWith:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1760
	    AbortOperationRequest raiseRequest
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1761
	].
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1762
    ]
6204
2bafef9151dd class based exceptions - abortSignal;
Claus Gittinger <cg@exept.de>
parents: 5870
diff changeset
  1763
2bafef9151dd class based exceptions - abortSignal;
Claus Gittinger <cg@exept.de>
parents: 5870
diff changeset
  1764
    "Modified: / 16.11.2001 / 17:39:18 / cg"
5592
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1765
!
d1b0db212b9d added #abort
Claus Gittinger <cg@exept.de>
parents: 5491
diff changeset
  1766
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1767
resume
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1768
    "resume the receiver process"
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1769
4002
341a896cb334 allow stopping a waiting process
Claus Gittinger <cg@exept.de>
parents: 3785
diff changeset
  1770
    state == #stopped ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  1771
	state := #run.
4002
341a896cb334 allow stopping a waiting process
Claus Gittinger <cg@exept.de>
parents: 3785
diff changeset
  1772
    ].
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1773
    Processor resume:self
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
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1776
resumeForSingleSend
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1777
    "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
  1778
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1779
    Processor resumeForSingleSend:self
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1780
!
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  1781
326
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1782
stop
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1783
    "suspend the receiver process - will continue to run when a resume is sent.
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1784
     A stopped process will not be resumed for interrupt processing."
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1785
11283
b092a213a0d3 comments
Stefan Vogel <sv@exept.de>
parents: 10742
diff changeset
  1786
    self suspendWithState:#stopped.
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1787
3679
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
  1788
    "Modified: / 13.12.1995 / 13:22:58 / stefan"
ed4a806da8b8 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3293
diff changeset
  1789
    "Modified: / 27.7.1998 / 23:37:15 / cg"
326
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1790
!
d2902942491d *** empty log message ***
claus
parents: 314
diff changeset
  1791
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1792
suspend
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1793
    "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
  1794
     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
  1795
     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
  1796
     a suspend (see wait code in Semaphore).
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1797
     Use #stop for a hard-suspend, which is not affected by interrupts."
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  1798
1474
e1bc3fa1a119 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1352
diff changeset
  1799
    self suspendWithState:#suspended
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1800
1474
e1bc3fa1a119 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1352
diff changeset
  1801
    "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
  1802
!
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1803
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1804
suspendWithState:aStateSymbol
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1805
    "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
  1806
     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
  1807
     in the ProcessMonitor (instead of #suspended).
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1808
     (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
  1809
     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
  1810
     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
  1811
     a suspend (see wait code in Semaphore).
16312
57924eddbb3e class: Process
Claus Gittinger <cg@exept.de>
parents: 16182
diff changeset
  1812
     Use #stop for a hard-suspend, which is not affected by interrupts.
57924eddbb3e class: Process
Claus Gittinger <cg@exept.de>
parents: 16182
diff changeset
  1813
     Should be called with interrupts disabled."
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1814
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1815
    suspendSemaphore notNil ifTrue:[suspendSemaphore signalForAll].
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1816
    suspendActions notNil ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1817
	|savedState|
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1818
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1819
	savedState := state.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1820
	state := #aboutToSuspend.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1821
	suspendActions do:[:action | action value].
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1822
	state ~~ #aboutToSuspend ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1823
	    "/ mhmh - one of the suspendActions lead to making me active again;
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1824
	    "/ bail out.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1825
	    "/ This fixes the Semaphore was signalled, but process did not run error,
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1826
	    "/ which can happen when a process with a suspend action goes into a readWait,
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1827
	    "/ and the suspend action does a thread switch, and the readWait semaphore gets
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1828
	    "/ signalled before we come back here. Then the semaphore wakeup will have already
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1829
	    "/ place me back into the run state, so I should not go into a suspend below.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1830
	    ^ self.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1831
	].
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1832
	state := savedState.
752
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
    "
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1836
     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
  1837
     set the state to something like #ioWait etc.
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  1838
     In this case, do not set the receiver's state to #suspend.
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1839
     (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
  1840
    "
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1841
    (state == #active
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1842
    or:[state == #run
4002
341a896cb334 allow stopping a waiting process
Claus Gittinger <cg@exept.de>
parents: 3785
diff changeset
  1843
    or:[aStateSymbol == #stopped]]) ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1844
	state := aStateSymbol.
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  1845
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1846
    Processor suspend:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1847
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1848
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1849
terminate
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1850
    "terminate the receiver process.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1851
     Termination is done by raising the terminateSignal in the receiver process,
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2636
diff changeset
  1852
     which can be caught.
375
claus
parents: 359
diff changeset
  1853
     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
  1854
     will be performed before the process is really terminated.
dff1649c072c resume the process when terminated.
Claus Gittinger <cg@exept.de>
parents: 4002
diff changeset
  1855
     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
  1856
     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
  1857
     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
  1858
     done."
10
claus
parents: 5
diff changeset
  1859
2888
3e8b5166d90f a rocess which had no chance yet to run, can be #terminated with
Claus Gittinger <cg@exept.de>
parents: 2857
diff changeset
  1860
    |wasBlocked|
3e8b5166d90f a rocess which had no chance yet to run, can be #terminated with
Claus Gittinger <cg@exept.de>
parents: 2857
diff changeset
  1861
3293
3f52fbf6b94c oops - a self-terminating process did not evaluate its
Claus Gittinger <cg@exept.de>
parents: 3094
diff changeset
  1862
    Processor activeProcess ~~ self ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1863
	wasBlocked := OperatingSystem blockInterrupts.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1864
	[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1865
	    state == #osWait ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1866
		self terminateNoSignal.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1867
		^ self.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1868
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1869
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1870
	    "if the receiver had no chance to execute yet,
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1871
	     it can be shot down without a signal"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1872
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1873
	    self suspendedContext isNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1874
		self terminateNoSignal.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1875
		^ self
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1876
	    ]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1877
	] ensure:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1878
	    wasBlocked ifFalse:[OperatingSystem unblockInterrupts]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1879
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1880
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1881
	"register an interrupt action and resume that process"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1882
	self interruptWith:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1883
	    NoHandlerError handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1884
		ex exception creator == TerminateProcessRequest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1885
		    ex return.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1886
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1887
		ex reject.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1888
	    ] do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1889
		TerminateProcessRequest raise.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1890
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1891
	    self terminateNoSignal.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1892
	].
3293
3f52fbf6b94c oops - a self-terminating process did not evaluate its
Claus Gittinger <cg@exept.de>
parents: 3094
diff changeset
  1893
    ] ifFalse:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1894
	"terminating myself"
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1895
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1896
	NoHandlerError handle:[:ex |
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1897
	    ex exception creator == TerminateProcessRequest ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1898
		ex return.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1899
	    ].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1900
	    ex reject.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1901
	] do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1902
	    TerminateProcessRequest raise.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1903
	].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  1904
	self terminateNoSignal.
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1905
    ]
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1906
3776
87eda283dab1 fix terminate while in osWait (win32)
Claus Gittinger <cg@exept.de>
parents: 3723
diff changeset
  1907
    "Modified: / 24.8.1998 / 18:29:46 / cg"
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1908
!
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  1909
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1910
terminateAllGUISubprocesses
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  1911
    "terminate all the receiver's gui subprocesses and their children as well
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1912
     (i.e. all processes which are offsprings of the receiver, except for
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1913
      the receiver itself)."
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1914
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1915
    id isNil ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1916
	"/ problem:
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1917
	"/ if receiver is already dead, its id is nil.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1918
	"/ children are found by looking for processes with a parentID identical to
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1919
	"/ mine - ifNil, system processes are found, which is probably not what you
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1920
	"/ want ...
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1921
	"/ FIX: remember the id (or dont nil it when terminating)
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1922
	"/ requires VM changes.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1923
	ProcessorScheduler invalidProcessSignal
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1924
	    raiseRequestWith:self
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1925
	    errorString:'process is already dead - cannot determine child processes'.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1926
	^ self
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1927
    ].
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1928
    ProcessorScheduler knownProcesses do:[:aProcess |
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1929
	aProcess ~~ self ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1930
	    aProcess creatorId == id ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1931
		aProcess isGUIProcess ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1932
		    aProcess terminateWithAllGUISubprocesses
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1933
		]
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1934
	    ]
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1935
	]
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1936
    ].
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1937
14443
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1938
    "Created: / 28-10-1996 / 20:43:32 / cg"
31dd04f0917f changed: #parentProcess
Claus Gittinger <cg@exept.de>
parents: 14359
diff changeset
  1939
    "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
  1940
!
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  1941
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1942
terminateAllSubprocessesInGroup
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1943
    "terminate all subprocesses which have the receiver process as groupID,
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1944
     and their group-children as well.
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  1945
     (i.e. all processes in the receiver's process group, except for the receiver itself,
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  1946
      and recursively oll of their group processes.)."
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  1947
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1948
    id isNil ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1949
	"/ problem:
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1950
	"/ if receiver is already dead, its id is nil.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1951
	"/ children are found by looking for processes with a parentID identical to
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1952
	"/ mine - ifNil, system processes are found, which is probably not what you
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1953
	"/ want ...
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1954
	"/ FIX: remember the id (or dont nil it when terminating)
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1955
	"/ requires VM changes.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1956
	ProcessorScheduler invalidProcessSignal
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1957
	    raiseRequestWith:self
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1958
	    errorString:'process is already dead - cannot determine child processes'.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1959
	^ self
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  1960
    ].
9300
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1961
    self terminateAllSubprocessesInGroup:id
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
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1964
terminateAllSubprocessesInGroup:aGroup
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1965
    "terminate all subprocesses which have aGroup as groupID,
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1966
     and their group-children as well.
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  1967
     (i.e. all processes in the receiver's process group, except for the receiver itself,
9300
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1968
      and recursively oll of their group processes.)."
94f4a2f63aa8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9226
diff changeset
  1969
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  1970
    ProcessorScheduler knownProcesses do:[:aProcess |
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1971
	aProcess ~~ self ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1972
	    (aProcess processGroupId == aGroup) ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1973
		aProcess terminateWithAllSubprocessesInGroup
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1974
	    ]
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1975
	]
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  1976
    ].
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1977
3094
647219dc860b avoid endless recursion in terminateAllSubProcesses
Claus Gittinger <cg@exept.de>
parents: 3013
diff changeset
  1978
    "Created: / 28.10.1996 / 20:43:32 / cg"
647219dc860b avoid endless recursion in terminateAllSubProcesses
Claus Gittinger <cg@exept.de>
parents: 3013
diff changeset
  1979
    "Modified: / 3.11.1997 / 00:28:06 / cg"
1837
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
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1982
terminateGroup
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  1983
    "terminate the receiver with all of its created subprocesses
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  1984
     that are in the receiver's process group."
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  1985
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1986
    id isNil ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1987
	"/ problem:
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1988
	"/ if receiver is already dead, its id is nil.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1989
	"/ children are found by looking for processes with a parentID identical to
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1990
	"/ mine - ifNil, system processes are found, which is probably not what you
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1991
	"/ want ...
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1992
	"/ FIX: remember the id (or dont nil it when terminating)
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1993
	"/ requires VM changes.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1994
	ProcessorScheduler invalidProcessSignal
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1995
	    raiseRequestWith:self
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1996
	    errorString:'process is already dead - cannot determine child processes'.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  1997
	^ self
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1998
    ].
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  1999
    ProcessorScheduler knownProcesses do:[:aProcess |
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2000
	aProcess ~~ self ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2001
	    aProcess processGroupId == id ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2002
		aProcess terminate
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2003
	    ]
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2004
	]
5683
3312d4d798dc terminateAllGUISubprocesses no longer restricted to processGroup.
Stefan Vogel <sv@exept.de>
parents: 5681
diff changeset
  2005
    ].
5812
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  2006
    self terminate
e23a3fdc75cb already-dead is a proceedable error
Claus Gittinger <cg@exept.de>
parents: 5683
diff changeset
  2007
!
1531
2a61dad6c7ce added #beGroupLeader & #terminateGroup
Claus Gittinger <cg@exept.de>
parents: 1530
diff changeset
  2008
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2009
terminateNoSignal
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2010
    "hard-terminate the receiver process without sending a terminateSignal
375
claus
parents: 359
diff changeset
  2011
     or performing any unwind-handling.
2197
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2012
     However, exit-actions are performed.
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2013
     This is useful in case of emergency, when a buggy terminationHandler
bb9bc22f794b commentary
Claus Gittinger <cg@exept.de>
parents: 2196
diff changeset
  2014
     prevents you from getting a process to terminate."
375
claus
parents: 359
diff changeset
  2015
claus
parents: 359
diff changeset
  2016
    |block|
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2017
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2018
    "/ this is treated like the final suspend
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2019
    suspendActions notNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2020
	[suspendActions isEmpty] whileFalse:[
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2021
	    block := suspendActions removeFirst.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2022
	    block value.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2023
	]
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2024
    ].
375
claus
parents: 359
diff changeset
  2025
    exitActions notNil ifTrue:[
5450
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2026
	[exitActions isEmpty] whileFalse:[
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2027
	    block := exitActions removeFirst.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2028
	    block value.
b0edfff99a73 rel5 preps
Claus Gittinger <cg@exept.de>
parents: 5397
diff changeset
  2029
	]
375
claus
parents: 359
diff changeset
  2030
    ].
329
claus
parents: 326
diff changeset
  2031
    suspendSemaphore notNil ifTrue:[suspendSemaphore signalForAll].
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2032
    Processor terminateNoSignal:self
752
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2033
0259dd855289 new suspendAction, Semaphore & ProcSched stuff from stefan
Claus Gittinger <cg@exept.de>
parents: 712
diff changeset
  2034
    "Modified: 13.12.1995 / 13:40:14 / stefan"
2384
ceb4f8de635a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2302
diff changeset
  2035
    "Modified: 12.2.1997 / 12:41:38 / cg"
1837
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
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2038
terminateSubprocesses
19751
4e212ebc3961 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19452
diff changeset
  2039
    "terminate all the receiver's subprocesses
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  2040
     (i.e. all processes in the receiver's process group, except for
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2041
      the receiver itself)."
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2042
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  2043
    id isNil ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2044
	"/ problem:
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2045
	"/ if receiver is already dead, its id is nil.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2046
	"/ children are found by looking for processes with a parentID identical to
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2047
	"/ mine - ifNil, system processes are found, which is probably not what you
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2048
	"/ want ...
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2049
	"/ FIX: remember the id (or dont nil it when terminating)
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2050
	"/ requires VM changes.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2051
	ProcessorScheduler invalidProcessSignal
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2052
	    raiseRequestWith:self
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2053
	    errorString:'process is already dead - cannot determine child processes'.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2054
	^ self
10496
1198c42b85f5 Be conservative when setting helper processes of executeCommand:...
Stefan Vogel <sv@exept.de>
parents: 10436
diff changeset
  2055
    ].
1198c42b85f5 Be conservative when setting helper processes of executeCommand:...
Stefan Vogel <sv@exept.de>
parents: 10436
diff changeset
  2056
    processGroupId == 0 ifTrue:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2057
	ProcessorScheduler invalidProcessSignal
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2058
	    raiseWith:self errorString:'trying to terminate the system process group'.
5377
575184539847 cannot terminate an already dead processes children
ca
parents: 5256
diff changeset
  2059
    ].
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2060
    ProcessorScheduler knownProcesses do:[:aProcess |
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2061
	aProcess ~~ self ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2062
	    (aProcess processGroupId == processGroupId
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2063
	    or:[aProcess processGroupId == id]) ifTrue:[
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2064
		aProcess terminate
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2065
	    ]
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2066
	]
1837
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
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2069
    "Created: 28.10.1996 / 20:41:49 / cg"
2891
9020b3130d83 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2888
diff changeset
  2070
    "Modified: 26.8.1997 / 03:09:57 / cg"
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2071
!
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2072
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2073
terminateWithAllGUISubprocesses
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2074
    "terminate the receiver with all of its created gui subprocesses and their gui children."
4875
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2075
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2076
    self terminateAllGUISubprocesses.
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2077
    self terminate
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2078
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2079
    "Modified: 28.10.1996 / 20:42:00 / cg"
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2080
    "Created: 28.10.1996 / 20:44:07 / cg"
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2081
!
5c0e3d74978e add terminateAllGui .... processes
ca
parents: 4874
diff changeset
  2082
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2083
terminateWithAllSubprocessesInGroup
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2084
    "terminate the receiver with
19452
b884f7087b9f #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19388
diff changeset
  2085
     all subprocesses which have the receiver's process ID as groupID,
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2086
     and their group-children as well.
19751
4e212ebc3961 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19452
diff changeset
  2087
     (i.e. the receiver plus all processes in the receiver's process group,
6783
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2088
      and recursively all of their group processes)."
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2089
013e21518b98 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6775
diff changeset
  2090
    self terminateAllSubprocessesInGroup.
1837
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2091
    self terminate
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2092
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2093
    "Modified: 28.10.1996 / 20:42:00 / cg"
7e3b67a1adab more subprocess termination variants
Claus Gittinger <cg@exept.de>
parents: 1789
diff changeset
  2094
    "Created: 28.10.1996 / 20:44:07 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2095
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2096
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2097
!Process methodsFor:'thread local storage'!
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2098
19387
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2099
environment
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2100
    "return the dictionary holding thread local variables, or nil if there are none"
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2101
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2102
    ^ environment
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2103
!
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2104
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2105
environment:aDictionary
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2106
    "set the dictionary holding thread local variables, or nil if there are to be none"
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2107
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2108
    environment := aDictionary
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2109
!
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2110
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2111
environmentAt:aKey
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2112
    "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
  2113
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2114
    ^ self
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2115
	environmentAt:aKey
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2116
	ifAbsent:[
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2117
	    self errorKeyNotFound:aKey.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2118
	]
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2119
!
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
environmentAt:aKey ifAbsent:defaultValue
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2122
    "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
  2123
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2124
    |val|
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2125
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2126
    environment isNil ifTrue:[^ defaultValue value].
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2127
    val := environment at:aKey ifAbsent:[^ defaultValue value].
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2128
    ^ val value.
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2129
!
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2130
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2131
environmentAt:aKey put:aValue
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2132
    "set the value of a thread local variable. Returns 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
    |var|
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2135
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2136
    environment isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2137
	environment := IdentityDictionary new
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2138
    ].
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2139
    var := environment at:aKey ifAbsent:nil.
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2140
    var isNil ifTrue:[
14722
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2141
	var := ValueHolder new.
f481fa77115d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14443
diff changeset
  2142
	environment at:aKey put:var.
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2143
    ].
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2144
    var value:aValue.
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2145
    ^ aValue
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2146
!
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2147
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2148
environmentIncludesKey:aKey
19388
869a47877c44 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19387
diff changeset
  2149
    "true if there is a thread local variable, false if no such variable exists"
869a47877c44 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19387
diff changeset
  2150
869a47877c44 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19387
diff changeset
  2151
    environment isNil ifTrue:[^ false].
869a47877c44 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19387
diff changeset
  2152
    ^ environment includesKey:aKey
869a47877c44 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19387
diff changeset
  2153
!
869a47877c44 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19387
diff changeset
  2154
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2155
stderr
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2156
    "the processes stderr.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2157
     By default, this is Stderr, but it can be overwritten
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2158
     (for example to redirect a thread's error output to some other place"
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2159
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2160
    ^ self environmentAt:#Stderr ifAbsent:Stderr
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2161
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2162
    "
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2163
     Processor activeProcess stdout
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2164
    "
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2165
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2166
    "
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2167
     |out sema|
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2168
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2169
     out := WriteStream on:''.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2170
     sema := Semaphore new.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2171
     [
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2172
	Processor activeProcess environmentAt:#Stdout put:out.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2173
	'hello world' printCR.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2174
	sema signal.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2175
     ] fork.
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2176
     sema wait.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2177
     Transcript showCR:('output was: ''',out contents,'''').
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2178
    "
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2179
!
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2180
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2181
stdin
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2182
    "the processes stdin.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2183
     By default, this is Stdin, but it can be overwritten
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2184
     (for example to redirect a thread's input from some other place"
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2185
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2186
    ^ self environmentAt:#Stdin ifAbsent:Stdin
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2187
!
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2188
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2189
stdout
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2190
    "the processes stdout.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2191
     By default, this is Stdout, but it can be overwritten
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2192
     (for example to redirect a thread's output to some other place"
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2193
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2194
    ^ self environmentAt:#Stdout ifAbsent:Stdout
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2195
!
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2196
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2197
threadVariableValueOf:aKey
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2198
    "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
  2199
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2200
    ^ self environmentAt:aKey ifAbsent:nil
16047
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2201
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2202
    "
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2203
     see example in withThreadVariable:boundTo:do:
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2204
    "
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2205
!
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2206
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2207
transcript
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2208
    "the processes transcript.
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2209
     By default, this is Transcript, but it can be overwritten
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2210
     (for example to redirect a thread's output to some other place"
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2211
19380
266a598cc12c #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19377
diff changeset
  2212
    ^ self environmentAt:#Transcript ifAbsent:[Transcript]
19377
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2213
!
fca073527bd3 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19297
diff changeset
  2214
19387
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2215
withThreadLocalVariables:aDictionary do:aBlock
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2216
    "evaluate a block with threadLocalVariables from aDictionary;
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2217
     restore the old bindings afterwards."
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2218
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2219
    |oldEnv result|
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2220
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2221
    oldEnv := environment.
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2222
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2223
    [
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2224
	environment := aDictionary.
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2225
	result := aBlock value.
19387
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2226
    ] ensure:[
19860
324edacff5cc unified cpu and os defines;
Claus Gittinger <cg@exept.de>
parents: 19751
diff changeset
  2227
	environment := oldEnv.
19387
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2228
    ].
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2229
    ^ result
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2230
!
8f5c7d69067e #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19380
diff changeset
  2231
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2232
withThreadVariable:variableNameSymbol boundTo:aValue do:aBlock
7427
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2233
    "evaluate a block with the threadLocalVariable being bound to aValue;
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2234
     undo the variable binding afterwards."
7426b3fe9570 more environment accessors
Claus Gittinger <cg@exept.de>
parents: 7263
diff changeset
  2235
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2236
    |var oldValue result|
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2237
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2238
    environment isNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2239
	environment := IdentityDictionary new
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2240
    ].
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2241
    var := environment at:variableNameSymbol ifAbsent:nil.
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2242
    var isNil ifTrue:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2243
	var := ValueHolder new.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2244
	environment at:variableNameSymbol put:var.
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2245
    ].
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2246
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2247
    oldValue := var value.
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2248
    [
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2249
	var value:aValue.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2250
	result := aBlock value.
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2251
    ] ensure:[
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2252
	oldValue isNil
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2253
	    ifTrue:[ environment removeKey:variableNameSymbol]
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2254
	    ifFalse:[ var value:oldValue ]
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2255
    ].
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2256
    ^ result
16047
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2257
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2258
    "
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2259
     |printIt|
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2260
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2261
     printIt := [ Transcript showCR:'foo is now ',(Processor activeProcess threadVariableValueOf:#foo) printString ].
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2262
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2263
     Processor activeProcess
16562
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2264
	 withThreadVariable:#foo
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2265
	 boundTo:1234
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2266
	 do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2267
	    printIt value.
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2268
	    Processor activeProcess
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2269
		withThreadVariable:#foo
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2270
		boundTo:2345
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2271
		do:[
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2272
		    printIt value
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2273
		].
Claus Gittinger <cg@exept.de>
parents: 16421
diff changeset
  2274
	    ]
16047
98326db8c188 class: Process
Claus Gittinger <cg@exept.de>
parents: 15964
diff changeset
  2275
    "
6739
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2276
! !
63fc2acb417a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6738
diff changeset
  2277
1784
af6446feffae optionally pass the interruptedContext to a #interruptWith: block
Claus Gittinger <cg@exept.de>
parents: 1728
diff changeset
  2278
!Process class methodsFor:'documentation'!
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2279
19293
81e42b6626fb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19292
diff changeset
  2280
version
81e42b6626fb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19292
diff changeset
  2281
    ^ '$Header$'
81e42b6626fb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19292
diff changeset
  2282
!
81e42b6626fb #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19292
diff changeset
  2283
13398
5c6fd278f26b added: #version_CVS
vrany
parents: 13206
diff changeset
  2284
version_CVS
19292
be9b1c99ec11 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18189
diff changeset
  2285
    ^ '$Header$'
12764
c3da6be46ff1 use _MAX_INT instead of 0x3fffffff in primitive code when generating SmallIntegers
Stefan Vogel <sv@exept.de>
parents: 11416
diff changeset
  2286
!
c3da6be46ff1 use _MAX_INT instead of 0x3fffffff in primitive code when generating SmallIntegers
Stefan Vogel <sv@exept.de>
parents: 11416
diff changeset
  2287
13398
5c6fd278f26b added: #version_CVS
vrany
parents: 13206
diff changeset
  2288
version_SVN
15964
ee3faaeb7427 class: Process
Claus Gittinger <cg@exept.de>
parents: 15117
diff changeset
  2289
    ^ '$ Id: Process.st 10643 2011-06-08 21:53:07Z vranyj1  $'
159
514c749165c3 *** empty log message ***
claus
parents: 116
diff changeset
  2290
! !
6774
6711472e6df4 oops - waitUntil terminated for a process that did not rune
penk
parents: 6739
diff changeset
  2291
15117
d7e7376ee1a4 class: Process
Claus Gittinger <cg@exept.de>
parents: 14724
diff changeset
  2292
699
12f456343eea checkin from browser
Claus Gittinger <cg@exept.de>
parents: 532
diff changeset
  2293
Process initialize!