summaryrefslogtreecommitdiff
path: root/load.c
diff options
context:
space:
mode:
Diffstat (limited to 'load.c')
-rw-r--r--load.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/load.c b/load.c
index 9f09dd548d..9d389f9efb 100644
--- a/load.c
+++ b/load.c
@@ -415,10 +415,12 @@ load_unlock(const char *ftptr, int done)
st_data_t key = (st_data_t)ftptr;
st_data_t data;
st_table *loading_tbl = get_loading_table();
+ VALUE barrier;
- if (st_delete(loading_tbl, &key, &data)) {
- VALUE barrier = (VALUE)data;
- xfree((char *)key);
+ if (!st_lookup(loading_tbl, key, &data)) return;
+ barrier = (VALUE)data;
+ if (rb_barrier_waiting(barrier) ||
+ (st_delete(loading_tbl, &key, &data) && (xfree((char *)key), 1))) {
if (done)
rb_barrier_destroy(barrier);
else