for the first problem, you've found a bug in the Racket CS thread
scheduler (i.e., Racket BC behaves correctly in this case). Suspending
a thread that is sleeping didn't prevent the thread from being woken up
on its previous schedule. I've pushed a repair as commit 7a12b4ac93.

After fixing that bug and using `thread/suspend-to-kill`, the second
part works as expected. But if `t1` is created with `thread`, the
behavior you describe sounds right: `t2` cannot resume a thread that
was created with `thread` and then terminated by a custodian.

Thanks for the report!
Matthew

At Sat, 7 Nov 2020 15:26:17 -0800 (PST), Greg Rosenblatt wrote:
> I'm experimenting with using custodians to manage threads (on Racket 7.8 
> [cs]) and encountering behavior I don't understand.
> 
> I start a looping thread `t1` under a new custodian `c1`.
> 
> I then shutdown `c1` and expect `t1` to stop looping.  If I started `t1` 
> with `thread` then this expectation is met.  However, if I start it with 
> `thread/suspend-to-kill`, it continues looping even after `c1` is shut 
> down.  Is this the correct behavior?
> 
> Additionally, I later start a new thread `t2` under a new custodian `c2`, 
> which attempts to resume `t1` after the shutdown, using itself as a 
> benefactor.  However, `t1` does not seem to resume.  Is this the correct 
> behavior?
> 
> Here is the code I'm working with:
> 
> ```
> #lang racket
> 
> (define c1 (make-custodian))
> (define c2 (make-custodian))
> (define t1 #f)
> (define t2 #f)
> 
> (parameterize ((current-custodian c1))
>   ;(set! t1 (thread/suspend-to-kill  ;; (custodian-shutdown-all c1) fails 
> to suspend this thread
>   (set! t1 (thread
>              (lambda ()
>                (let loop ()
>                  (displayln "thread 1")
>                  (sleep 2)
>                  (loop))))))
> 
> (displayln "ENTER to continue")
> (read-line)
> 
> (custodian-shutdown-all c1)
> 
> (displayln "ENTER to continue")
> (read-line)
> 
> (parameterize ((current-custodian c2))
>   (set! t2 (thread
>              (lambda ()
>                (thread-resume t1 (current-thread))
>                (let loop ()
>                  (displayln "thread 2")
>                  (sleep 2)
>                  (loop))))))
> 
> (displayln "ENTER to continue")
> (read-line)
> 
> (custodian-shutdown-all c2)
> 
> (displayln "ENTER to continue")
> (read-line)
> ```
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/f844779f-9abd-46bd-987f-b2b3ca3d
> 0925n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/20201107174703.320%40sirmail.smtps.cs.utah.edu.

Reply via email to