Skip to content

Commit 25cd751

Browse files
committed
tmp: avoid dead lock in callback
1 parent 419550b commit 25cd751

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

c_src/main.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,20 @@ erlfdb_future_cb(FDBFuture* fdb_future, void* data)
8181
if(enif_thread_type() == ERL_NIF_THR_UNDEFINED) {
8282
caller = NULL;
8383
} else {
84+
enif_mutex_lock(future->lock);
8485
caller = future->pid_env;
8586
}
8687

87-
enif_mutex_lock(future->lock);
88+
8889

8990
if(!future->cancelled) {
9091
msg = T2(future->msg_env, future->msg_ref, ATOM_ready);
9192
enif_send(caller, &(future->pid), future->msg_env, msg);
9293
}
9394

94-
enif_mutex_unlock(future->lock);
95+
if (caller) {
96+
enif_mutex_unlock(future->lock);
97+
}
9598

9699
// We're now done with this future which means we need
97100
// to release our handle to it. See erlfdb_create_future

0 commit comments

Comments
 (0)