@@ -70,6 +70,7 @@ static OperatorResultType PageRankInOut(ExecutionContext &context, TableFunction
7070static OperatorFinalizeResultType PageRankFinal (ExecutionContext &context, TableFunctionInput &data, DataChunk &output) {
7171 auto &bind = data.bind_data ->Cast <PageRankBindData>();
7272 auto &gs = data.global_state ->Cast <PageRankGlobalState>();
73+ std::lock_guard<std::mutex> lock (gs.input_mutex );
7374 if (!gs.computed ) {
7475 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
7576 size_t ec = gs.src_nodes .size ();
@@ -123,6 +124,7 @@ static OperatorResultType DegreeInOut(ExecutionContext &ctx, TableFunctionInput
123124}
124125static OperatorFinalizeResultType DegreeFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
125126 auto &bd = data.bind_data ->Cast <DegreeBindData>(); auto &gs = data.global_state ->Cast <DegreeGlobalState>();
127+ std::lock_guard<std::mutex> lock (gs.input_mutex );
126128 if (!gs.computed ) {
127129 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
128130 int64_t nc = ::onager::onager_compute_degree (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), bd.directed , nullptr , nullptr , nullptr );
@@ -171,6 +173,7 @@ static OperatorResultType BetweennessInOut(ExecutionContext &ctx, TableFunctionI
171173}
172174static OperatorFinalizeResultType BetweennessFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
173175 auto &bd = data.bind_data ->Cast <BetweennessBindData>(); auto &gs = data.global_state ->Cast <BetweennessGlobalState>();
176+ std::lock_guard<std::mutex> lock (gs.input_mutex );
174177 if (!gs.computed ) {
175178 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
176179 int64_t nc = ::onager::onager_compute_betweenness (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), bd.normalized , nullptr , nullptr );
@@ -216,6 +219,7 @@ static OperatorResultType ClosenessInOut(ExecutionContext &ctx, TableFunctionInp
216219}
217220static OperatorFinalizeResultType ClosenessFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
218221 auto &gs = data.global_state ->Cast <ClosenessGlobalState>();
222+ std::lock_guard<std::mutex> lock (gs.input_mutex );
219223 if (!gs.computed ) {
220224 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
221225 int64_t nc = ::onager::onager_compute_closeness (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), nullptr , nullptr );
@@ -261,6 +265,7 @@ static OperatorResultType HarmonicInOut(ExecutionContext &ctx, TableFunctionInpu
261265}
262266static OperatorFinalizeResultType HarmonicFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
263267 auto &gs = data.global_state ->Cast <HarmonicGlobalState>();
268+ std::lock_guard<std::mutex> lock (gs.input_mutex );
264269 if (!gs.computed ) {
265270 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
266271 int64_t nc = ::onager::onager_compute_harmonic (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), nullptr , nullptr );
@@ -313,6 +318,7 @@ static OperatorResultType KatzInOut(ExecutionContext &ctx, TableFunctionInput &d
313318}
314319static OperatorFinalizeResultType KatzFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
315320 auto &bd = data.bind_data ->Cast <KatzBindData>(); auto &gs = data.global_state ->Cast <KatzGlobalState>();
321+ std::lock_guard<std::mutex> lock (gs.input_mutex );
316322 if (!gs.computed ) {
317323 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
318324 int64_t nc = ::onager::onager_compute_katz (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), bd.alpha , bd.max_iter , bd.tolerance , nullptr , nullptr );
@@ -364,6 +370,7 @@ static OperatorResultType EigenvectorInOut(ExecutionContext &ctx, TableFunctionI
364370}
365371static OperatorFinalizeResultType EigenvectorFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
366372 auto &bd = data.bind_data ->Cast <EigenvectorBindData>(); auto &gs = data.global_state ->Cast <EigenvectorGlobalState>();
373+ std::lock_guard<std::mutex> lock (gs.input_mutex );
367374 if (!gs.computed ) {
368375 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
369376 int64_t nc = ::onager::onager_compute_eigenvector (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), bd.max_iter , bd.tolerance , nullptr , nullptr );
@@ -480,6 +487,7 @@ static OperatorResultType VoteRankInOut(ExecutionContext &ctx, TableFunctionInpu
480487}
481488static OperatorFinalizeResultType VoteRankFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
482489 auto &bd = data.bind_data ->Cast <VoteRankBindData>(); auto &gs = data.global_state ->Cast <VoteRankGlobalState>();
490+ std::lock_guard<std::mutex> lock (gs.input_mutex );
483491 if (!gs.computed ) {
484492 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
485493 int64_t nc = ::onager::onager_compute_voterank (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), bd.num_seeds , nullptr );
@@ -545,6 +553,7 @@ static OperatorResultType LocalReachingInOut(ExecutionContext &ctx, TableFunctio
545553}
546554static OperatorFinalizeResultType LocalReachingFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
547555 auto &bd = data.bind_data ->Cast <LocalReachingBindData>(); auto &gs = data.global_state ->Cast <LocalReachingGlobalState>();
556+ std::lock_guard<std::mutex> lock (gs.input_mutex );
548557 if (!gs.computed ) {
549558 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
550559 int64_t nc = ::onager::onager_compute_local_reaching (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), bd.distance , nullptr , nullptr );
@@ -590,6 +599,7 @@ static OperatorResultType LaplacianInOut(ExecutionContext &ctx, TableFunctionInp
590599}
591600static OperatorFinalizeResultType LaplacianFinal (ExecutionContext &ctx, TableFunctionInput &data, DataChunk &output) {
592601 auto &gs = data.global_state ->Cast <LaplacianGlobalState>();
602+ std::lock_guard<std::mutex> lock (gs.input_mutex );
593603 if (!gs.computed ) {
594604 if (gs.src_nodes .empty ()) { gs.computed = true ; output.SetCardinality (0 ); return OperatorFinalizeResultType::FINISHED; }
595605 int64_t nc = ::onager::onager_compute_laplacian (gs.src_nodes .data (), gs.dst_nodes .data (), gs.src_nodes .size (), nullptr , nullptr );
0 commit comments