vine_data_path_s *dp = (vine_data_path_s *)datapath;
RET_VAL_IF(!dp->plugin_fn || !dp->plugin_fn->close,
VINE_ERROR_INVALID_PARAMETER, "plugin_fn is NULL");
+
+ // Unset callbacks related with vine_dp_open() before closing to avoid timing issue.
+ dp->opened_cb = NULL;
+ dp->connected_cb = NULL;
dp->plugin_fn->close(dp->plugin_handle);
return VINE_ERROR_NONE;
dp->listen_dp = NULL;
delete dp->state;
+ dp->opened_cb = NULL;
+ dp->accepted_cb = NULL;
+ dp->connected_cb = NULL;
+ dp->recv_cb = NULL;
+ dp->terminated_cb = NULL;
+
VINE_LOGD("data_path[%p] is destroyed", datapath);
free(datapath);
return VINE_ERROR_NONE;