Doh, just realized I never responded to this. Thank you guys so much. As always, it's really appreciated.
On Tue, Jun 30, 2020, 7:21 PM Ryan Culpepper <[email protected]> wrote: > Here's a function that creates a thread that waits until a port is closed > and then prints a message: > > (define (watch-for-port-close p) > (thread (lambda () (sync (port-closed-evt out)) (eprintf "port > closed\n")))) > > For example: > > (define out (open-output-string)) > (watch-for-port-close out) ;; => #<thread> > (close-output-port out) ;; prints "port closed" > > One reason a port can get closed is because of a custodian shutdown, and > in that case you'd need to make sure that the watcher thread and its > current-error-port are not managed by the same custodian. Here's a version > that creates an unkillable thread (generally a bad idea, but probably okay > for debugging): > > (require ffi/unsafe/custodian) > (define (watch-for-port-close p) > (parameterize ((current-custodian (make-custodian-at-root))) > (thread (lambda () (sync (port-closed-evt out)) (eprintf "port > closed\n"))))) > > Ryan > > On Wed, Jul 1, 2020 at 1:08 AM Matthew Flatt <[email protected]> wrote: > >> At Tue, 30 Jun 2020 16:27:56 -0400, David Storrs wrote: >> > I have a port that (my current theory says) is being closed when it >> > shouldn't, but I'm having trouble isolating exactly where and when. I >> > thought maybe I could do something Rackety to say "as soon as this port >> > gets closed, run this function". I went digging through Wills and >> Plumbers >> > but I'm having trouble grokking it. Am I headed in the right >> direction, or >> > is there a better way? >> >> Wills and plumbers will not help. >> >> Do you have control over where the port is used to that you can >> substitute another port? In that case, you could wrap the port with >> `make-input-port` or `make-output-port`, and then you have control over >> the close method. >> >> -- >> 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/20200630164403.17c%40sirmail.smtp.cs.utah.edu >> . >> > -- 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/CAE8gKoe%3D5rVWODw848kta9dfz-KGNgTeP5UMCPTPSso0WhwcTw%40mail.gmail.com.

