static void allow_time_to_settle (client_t *self) { // We are still using hard pointers rather than cycled client IDs, so // there may be messages pending from a stream which refer to our client. // Stupid strategy for now is to give the client thread a while to process // these, before killing it. engine_set_wakeup_event (self, 1000, settled_event); }
static void process_write_request (client_t *self) { if (self->pipe == NULL) engine_set_next_event (self, pipe_shut_event); else if (pipe_accepts_data (self->pipe)) engine_set_next_event (self, have_reader_event); else if (zpipes_msg_timeout (self->request)) engine_set_wakeup_event (self, zpipes_msg_timeout (self->request), wakeup_event); // // or else wait until a reader arrives }
static void process_read_request (client_t *self) { if (zpipes_msg_size (self->request) == 0) engine_set_next_event (self, zero_read_event); else if (zlist_size (self->queue)) engine_set_next_event (self, have_data_event); else if (!self->pipe) // Read on closed pipe returns READ END engine_set_next_event (self, pipe_shut_event); else if (zpipes_msg_timeout (self->request)) engine_set_wakeup_event ( self, zpipes_msg_timeout (self->request), wakeup_event); // // or else wait until a writer has data for us }
static void handle_set_wakeup (client_t *self) { engine_set_wakeup_event(self, HEARTBEAT_DELAY, send_heartbeat_event); }