diff --git a/c_src/main.c b/c_src/main.c index cfd40e1..e94e319 100644 --- a/c_src/main.c +++ b/c_src/main.c @@ -81,17 +81,20 @@ erlfdb_future_cb(FDBFuture* fdb_future, void* data) if(enif_thread_type() == ERL_NIF_THR_UNDEFINED) { caller = NULL; } else { + enif_mutex_lock(future->lock); caller = future->pid_env; } - enif_mutex_lock(future->lock); + if(!future->cancelled) { msg = T2(future->msg_env, future->msg_ref, ATOM_ready); enif_send(caller, &(future->pid), future->msg_env, msg); } - enif_mutex_unlock(future->lock); + if (caller) { + enif_mutex_unlock(future->lock); + } // We're now done with this future which means we need // to release our handle to it. See erlfdb_create_future