static void nn_cinproc_shutdown (struct nn_fsm *self, int src, int type, NN_UNUSED void *srcptr) { struct nn_cinproc *cinproc; struct nn_sinproc *sinproc; struct nn_list_item *it; cinproc = nn_cont (self, struct nn_cinproc, fsm); if (src == NN_FSM_ACTION && type == NN_FSM_STOP) { /* First, unregister the endpoint from the global repository of inproc endpoints. This way, new connections cannot be created anymore. */ nn_ins_disconnect (&cinproc->item); /* Stop the existing connection. */ for (it = nn_list_begin (&cinproc->sinprocs); it != nn_list_end (&cinproc->sinprocs); it = nn_list_next (&cinproc->sinprocs, it)) { sinproc = nn_cont (it, struct nn_sinproc, item); nn_sinproc_stop (sinproc); } cinproc->state = NN_CINPROC_STATE_STOPPING; goto finish; }
static void nn_cinproc_shutdown (struct nn_fsm *self, int src, int type, NN_UNUSED void *srcptr) { struct nn_cinproc *cinproc; cinproc = nn_cont (self, struct nn_cinproc, fsm); if (nn_slow (src == NN_FSM_ACTION && type == NN_FSM_STOP)) { /* First, unregister the endpoint from the global repository of inproc endpoints. This way, new connections cannot be created anymore. */ nn_ins_disconnect (&cinproc->item); /* Stop the existing connection. */ nn_sinproc_stop (&cinproc->sinproc); cinproc->state = NN_CINPROC_STATE_STOPPING; } if (nn_slow (cinproc->state == NN_CINPROC_STATE_STOPPING)) { if (!nn_sinproc_isidle (&cinproc->sinproc)) return; cinproc->state = NN_CINPROC_STATE_IDLE; nn_fsm_stopped_noevent (&cinproc->fsm); nn_epbase_stopped (&cinproc->item.epbase); return; } nn_fsm_bad_state(cinproc->state, src, type); }