Le 2017-09-25 12:21, jtuc...@objektfabrik.de wrote : 

> Steven
> 
> You could add use a semaphore if changing code is an option.
> We once used MethodWrappers in VAST to answer a similar question regarding 
> whether a body of code can be removed from a system.
> 
> Joachim

This is exactly my usecase, i need to remove code that may be called by
a method on the stack - and i know exactly which method. However my base
hypothesis is that it is in an already running process (maybe a loop)
and that part i cannot change. Is there an existing Pharo implementation
of MethodWrappers ? 

Le 2017-09-25 14:32, Ben Coman wrote :

> I'm not sure if your wanting something more built in, or just "some way", 
> 
> so for the latter, consider wrapping in with your own status flags... 
> 
> status := #setup. 
> watcher := [[true] whileTrue:[  
> Transcript crShow: status.  
> 900 milliSeconds wait] 
> ] forkAt:36. 
> result := 0. 
> worker := [[true] whileTrue:[  
> status := #WORKING.  
> 1 second wait. 
> result := result + 1.  
> Transcript crShow: result.  
> status:=#waiting.  
> 3 seconds wait] 
> ] forkAt:35. 
> worker suspend. 
> worker resume. 
> 
> cheers -ben

 I want to avoid adding control in the code, because hypothetically the
process i want to check is already running and possibly written by
somebody else. I've think about a similar solution using metalinks, but
if the loop is on the stack then i don't know what i can do. 

Le 2017-09-25 12:42, Marcus Denker a wrote :

> you could iterate all processes, there then get the stack and look up the 
> sender chain
> if the method is somewhere to be found. If yes -> it is exectuted right now. 
> One problem is that which methods are on the stack changes, so you should 
> try to avoid process switches while doing the analysis. 
> 
> Marcus

Ok so if i know which process to analyse, i can just do something like
the following that i found in the Halt class: 

[ cntxt isNil ] whileFalse: [ 
        cntxt selector = aSelector ifTrue: [ ... ].
        cntxt := cntxt sender ] 

But if i actually found the method i was looking for on the stack, can i
somehow ask the suspended context to "execute" until it returns from
this method ? 

Steven. 

  

Reply via email to