int pony_stop() { scheduler_stop(); os_socket_shutdown(); return _atomic_load(&exit_code); }
int pony_stop() { scheduler_stop(); os_socket_shutdown(); return _atomic_load(&exit_code, __ATOMIC_ACQUIRE); }
static ERL_NIF_TERM nif_scheduler_stop(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { int failover; state_ptr state = (state_ptr) enif_priv_data(env); if(state->initilised == 0 ) { return enif_make_tuple2(env, enif_make_atom(env, "state_error"), enif_make_atom(env, "sheduler_not_inited")); } if(!enif_get_int( env, argv[0], &failover)) { return enif_make_tuple3(env, enif_make_atom(env, "argument_error"), enif_make_atom(env, "invalid_or_corrupted_parameter"), enif_make_atom(env, "failover")); } if(failover < 0 || failover > 1) { return enif_make_tuple3(env, enif_make_atom(env, "argument_error"), enif_make_atom(env, "invalid_or_corrupted_parameter"), enif_make_atom(env, "failover")); } SchedulerDriverStatus status = scheduler_stop( state->scheduler_state, failover ); if(status == 4){ // driver_stopped return enif_make_tuple2(env, enif_make_atom(env, "ok"), get_atom_from_status(env, status)); }else{ return enif_make_tuple2(env, enif_make_atom(env, "error"), get_atom_from_status(env, status)); } }