From eca996ad7ca57c848a29c706d301ca16d3d3e67b Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Sun, 23 Jul 2023 11:48:10 -0400 Subject: [PATCH] Fix GIL release for `to_columns_string()` --- cpp/perspective/src/cpp/view.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/cpp/perspective/src/cpp/view.cpp b/cpp/perspective/src/cpp/view.cpp index 74b83a524f..9e9c718f40 100644 --- a/cpp/perspective/src/cpp/view.cpp +++ b/cpp/perspective/src/cpp/view.cpp @@ -1580,10 +1580,10 @@ View::to_columns(t_uindex start_row, t_uindex end_row, bool get_pkeys, bool get_ids, bool _leaves_only, t_uindex num_sides, bool _has_row_path, std::string nidx, t_uindex columns_length, t_uindex group_by_length) const { - + PSP_GIL_UNLOCK(); + PSP_READ_LOCK(get_lock()); auto slice = get_data(start_row, end_row, start_col, end_col); - auto col_names = slice->get_column_names(); - auto schema = m_ctx->get_schema(); + auto& col_names = slice->get_column_names(); rapidjson::StringBuffer s; rapidjson::Writer writer(s); @@ -1628,9 +1628,12 @@ View::to_columns(t_uindex start_row, t_uindex end_row, bool get_pkeys, bool get_ids, bool _leaves_only, t_uindex num_sides, bool _has_row_path, std::string nidx, t_uindex columns_length, t_uindex group_by_length) const { + PSP_GIL_UNLOCK(); + PSP_READ_LOCK(get_lock()); auto slice = get_data(start_row, end_row, start_col, end_col); - auto col_names = slice->get_column_names(); - auto schema = m_ctx->get_schema(); + const std::vector>& col_names + = slice->get_column_names(); + rapidjson::StringBuffer s; rapidjson::Writer writer(s); writer.StartObject(); @@ -1671,8 +1674,11 @@ View::to_columns(t_uindex start_row, t_uindex end_row, bool get_pkeys, bool get_ids, bool leaves_only, t_uindex num_sides, bool has_row_path, std::string nidx, t_uindex columns_length, t_uindex group_by_length) const { + PSP_GIL_UNLOCK(); + PSP_READ_LOCK(get_lock()); + auto slice = get_data(start_row, end_row, start_col, end_col); - auto col_names = slice->get_column_names(); + const auto& col_names = slice->get_column_names(); rapidjson::StringBuffer s; rapidjson::Writer writer(s); writer.StartObject(); @@ -1721,8 +1727,10 @@ View::to_columns(t_uindex start_row, t_uindex end_row, bool get_pkeys, bool get_ids, bool leaves_only, t_uindex num_sides, bool has_row_path, std::string nidx, t_uindex columns_length, t_uindex group_by_length) const { - auto slice = get_data(start_row, end_row, start_col, end_col); - auto col_names = slice->get_column_names(); + PSP_GIL_UNLOCK(); + PSP_READ_LOCK(get_lock()); + const auto slice = get_data(start_row, end_row, start_col, end_col); + const auto& col_names = slice->get_column_names(); rapidjson::StringBuffer s; rapidjson::Writer writer(s); writer.StartObject();