gw0 [receiver-thread] RECEIVERTHREAD: starting to run gw0 sent gw0 sent gw1 [receiver-thread] RECEIVERTHREAD: starting to run gw1 sent gw1 sent gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw1 [receiver-thread] received gw1 [receiver-thread] received gw1 [receiver-thread] received gw1 [receiver-thread] received gw1 [receiver-thread] received gw0 sent gw1 sent gw0 sent gw1 sent gw0 sent gw1 sent gw1 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw1 [receiver-thread] received gw0 sent gw1 [receiver-thread] received gw1 sent gw0 sent gw1 sent gw0 sent gw1 sent gw0 sent gw1 sent gw0 sent gw1 sent gw1 [receiver-thread] received gw1 [receiver-thread] received gw1 [receiver-thread] received gw0 sent gw1 sent gw0 sent gw1 [receiver-thread] received gw1 sent gw0 sent gw0 sent gw1 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 [receiver-thread] received gw0 gateway.exit() called gw0 --> sending GATEWAY_TERMINATE gw0 sent gw0 --> io.close_write gw1 gateway.exit() called gw1 --> sending GATEWAY_TERMINATE gw1 sent gw1 --> io.close_write gw0 waiting for receiver thread to finish gw1 waiting for receiver thread to finish gw0 [receiver-thread] EOF without prior gateway termination message gw0 [receiver-thread] finishing receiving thread gw0 [receiver-thread] terminating execution gw0 [receiver-thread] closing read gw0 [receiver-thread] closing write gw0 [receiver-thread] terminating our receive pseudo pool gw1 [receiver-thread] EOF without prior gateway termination message gw1 [receiver-thread] finishing receiving thread gw1 [receiver-thread] terminating execution gw1 [receiver-thread] closing read gw1 [receiver-thread] closing write gw1 [receiver-thread] terminating our receive pseudo pool === atexit cleanup === === atexit cleanup ===