diff --git a/src/rcl_subscription_bindings.cpp b/src/rcl_subscription_bindings.cpp index 78bcd333..2f5ee251 100644 --- a/src/rcl_subscription_bindings.cpp +++ b/src/rcl_subscription_bindings.cpp @@ -283,18 +283,22 @@ Napi::Value SetContentFilter(const Napi::CallbackInfo& info) { free(argv); } + std::string error_string = ""; + if (ret != RCL_RET_OK) { + error_string = rcl_get_error_string().str; + rcl_reset_error(); + } + rcl_ret_t fini_ret = rcl_subscription_content_filter_options_fini(subscription, &options); if (ret != RCL_RET_OK) { - std::string error_string = rcl_get_error_string().str; - rcl_reset_error(); Napi::Error::New(env, error_string).ThrowAsJavaScriptException(); return env.Undefined(); } if (fini_ret != RCL_RET_OK) { - std::string error_string = rcl_get_error_string().str; + error_string = rcl_get_error_string().str; rcl_reset_error(); Napi::Error::New(env, error_string).ThrowAsJavaScriptException(); return env.Undefined(); diff --git a/test/test-subscription-content-filter.js b/test/test-subscription-content-filter.js index 5660324a..099b4ae1 100644 --- a/test/test-subscription-content-filter.js +++ b/test/test-subscription-content-filter.js @@ -295,7 +295,10 @@ describe('subscription content-filtering', function () { const contentFilter5 = { expression: 'data = 5', }; + // Stop spinning before changing content filter to avoid race condition + this.subscriberNode.stop(); subscription.setContentFilter(contentFilter5); + this.subscriberNode.spin(); resolve(msgCnt); }, SUBSCRIBER_WAIT_TIME) ); @@ -364,7 +367,10 @@ describe('subscription content-filtering', function () { const p1 = new Promise((resolve) => setTimeout(() => { const result = !msgCnt0 && msgCnt5 && !fail; + // Stop spinning before changing content filter to avoid race condition + this.subscriberNode.stop(); subscription.setContentFilter(); + this.subscriberNode.spin(); resolve(result); }, SUBSCRIBER_WAIT_TIME) );