Skip to content

Commit e974377

Browse files
committed
fix condition_variable segfault
1 parent b3974bb commit e974377

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

bindings/src/duckdb_node_bindings.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
#include <condition_variable>
77
#include <cstddef>
8-
#include <memory>
98
#include <mutex>
109
#include <optional>
1110
#include <string>
@@ -670,8 +669,8 @@ struct ScalarFunctionMainData {
670669
duckdb_function_info info;
671670
duckdb_data_chunk input;
672671
duckdb_vector output;
673-
std::unique_ptr<std::condition_variable> cv;
674-
std::unique_ptr<std::mutex> cv_mutex;
672+
std::condition_variable *cv;
673+
std::mutex *cv_mutex;
675674
bool done;
676675
};
677676
void ScalarFunctionMainCallback(Napi::Env env, Napi::Function callback, ScalarFunctionMainContext *context, ScalarFunctionMainData *data) {
@@ -717,8 +716,8 @@ void ScalarFunctionMainFunction(duckdb_function_info info, duckdb_data_chunk inp
717716
data->info = info;
718717
data->input = input;
719718
data->output = output;
720-
data->cv = std::make_unique<std::condition_variable>();
721-
data->cv_mutex = std::make_unique<std::mutex>();
719+
data->cv = new std::condition_variable;
720+
data->cv_mutex = new std::mutex;
722721
data->done = false;
723722
// The "blocking" part of this call only waits for queue space, not for the JS function call to complete.
724723
// Since we specify no limit to the queue space, it in fact never blocks.
@@ -730,8 +729,8 @@ void ScalarFunctionMainFunction(duckdb_function_info info, duckdb_data_chunk inp
730729
} else {
731730
duckdb_scalar_function_set_error(info, "BlockingCall returned not ok");
732731
}
733-
data->cv.reset();
734-
data->cv_mutex.reset();
732+
delete data->cv;
733+
delete data->cv_mutex;
735734
duckdb_free(data);
736735
}
737736

0 commit comments

Comments
 (0)