On May 3, 2013, at 9:44 AM, Henrik Johansen wrote:

>> oh.. on second thought, even better..
>> 
>> processToInterrupt
>>      "look for best candidate to interrupt:
>>         first who is not weak-finalization process
>>         and only then weak-finalization process, if nothing left to 
>> interrupt.
>>      
>>        filter out the idle process, since killing it is fatal
>>      "
>>      | list |
>>      
>>      list := OrderedCollection new.
>>      Processor scanSchedule: [:p |
>>              "gather everything but idle process, and processes whose
>> suspendedContext sender == nil,
>>              which usually means that process is only scheduled but had no 
>> chance to run"
>>              
>>              ((p ~~ Processor backgroundProcess) and: [ p suspendedContext 
>> sender notNil ])
>>                      ifTrue: [ list add: p ] ] startingAt: Processor 
>> activePriority.
>>      
>>      "now answer first process in list, skipping the finalization process"
>>      list do: [:p | p ==  WeakArray runningFinalizationProcess ifFalse: [ ^ 
>> p ] ].
>>      
>>      "now answer first process , if any ,otherwise answer ui process by 
>> default"
>>      ^ list isEmpty ifTrue: [ UIManager default uiProcess ] ifFalse: [ list 
>> first ]
>> 
>> 
>> so it interrupts
>> even if i do
>> 
>> 1 hour wait
>> 
>> in workspace
> Something like that yes, or maybe even:
> processToInterrupt
>       "Look for best candidate to interrupt:
>          - any scheduled non-finalization process of lower priority
>          - the weak-finalization process, if scheduled
>          - the UI process
>       Never interrupt the idle process, since killing it is fatal"
>       
>       | fallback |
>       
>       fallback := UIManager default uiProcess.
>       Processor 
>               scanSchedule: [:p |
>                       "suspendedContext sender == nil usually means that 
> process is only scheduled but had no chance to run"
>                       ((p ~~ Processor backgroundProcess) and: [ p 
> suspendedContext sender notNil ifTrue: [ 
>                               p ~~  WeakArray runningFinalizationProcess 
>                                       ifTrue: [^p]
>                                       ifFalse: [fallback := p]] ] 
>               startingAt: Processor activePriority.
>       ^fallback
> 
> Cheers,
> Henry
(That's just rewritten btw, functionality is the same)

Cheers,
Henry

Reply via email to