@@ -189,6 +189,8 @@ int WrapperAPI wrapperWrite(const void *handle, pDataList reqData) {
189189
190190 DataListCls req;
191191 pDataList p = reqData;
192+ py::gil_scoped_acquire acquire;
193+
192194 if (dataNum > 0 ) {
193195 for (int tmpIdx = 0 ; tmpIdx < dataNum; tmpIdx++) {
194196 DataListNode item;
@@ -218,6 +220,7 @@ int WrapperAPI wrapperWrite(const void *handle, pDataList reqData) {
218220
219221int WrapperAPI wrapperRead (const void *handle, pDataList *respData) {
220222 int ret = 0 ;
223+ py::gil_scoped_acquire acquire;
221224 std::string sid = GetHandleSid ((char *) handle);
222225 // 构造响应数据
223226 printf (" start read...sid %s\n " , sid.c_str ());
@@ -246,6 +249,8 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
246249 int psrCnt) {
247250 int ret = 0 ;
248251 std::string sid = " " ;
252+ py::gil_scoped_acquire acquire;
253+
249254 for (pParamList sidP = params; sidP != NULL ; sidP = sidP->next ) {
250255 if (NULL == sidP->key ) {
251256 continue ;
@@ -273,17 +278,17 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
273278 }
274279 spdlog::debug (" call wrapper exec: building req data, data num:{},sid:{}" , dataNum, sid);
275280
276- DataListCls req;
281+ DataListCls * req = new DataListCls () ;
277282 pDataList p = reqData;
278283 if (dataNum > 0 ) {
279284 for (int tmpIdx = 0 ; tmpIdx < dataNum; tmpIdx++) {
280285
281- DataListNode item;
282- item. key = p->key ;
286+ DataListNode * item = DataListNode () ;
287+ item-> key = p->key ;
283288
284289 // 直接拷贝
285290 size_t len = static_cast <size_t >(p->len );
286- item. data = py::bytes ((char *) (p->data ), len);
291+ item-> data = py::bytes ((char *) (p->data ), len);
287292 //
288293 // 写法2:
289294 // Py_ssize_t len = static_cast<Py_ssize_t>(p->len);
@@ -296,11 +301,11 @@ wrapperExec(const char *usrTag, pParamList params, pDataList reqData, pDataList
296301 // item.data = py::bytes(data);
297302 // todo 有无0拷贝方法?
298303
299- item. len = p->len ;
304+ item-> len = p->len ;
300305 char t = static_cast <int >(p->type );
301- item. type = p->type ;
306+ item-> type = p->type ;
302307 spdlog::debug (" reqDatatype :{},sid:{}" , p->type , sid);
303- req. list .push_back (item);
308+ req-> list .push_back (item);
304309 p = p->next ;
305310 }
306311 }
@@ -368,6 +373,8 @@ wrapperExecAsync(const char *usrTag, pParamList params, pDataList reqData, wrapp
368373 unsigned int psrIds[], int psrCnt) {
369374 int ret = 0 ;
370375 std::string sid = " " ;
376+ py::gil_scoped_acquire acquire;
377+
371378 for (pParamList sidP = params; sidP != NULL ; sidP = sidP->next ) {
372379 if (NULL == sidP->key ) {
373380 continue ;
0 commit comments