@@ -394,26 +394,46 @@ FieldlineAcqSystem::FieldlineAcqSystem(Fieldline* parent)
394394 // register "this" into somewhere findable by python's execution flow.
395395 acq_system = this ;
396396 initSampleArrays ();
397- // Py_DECREF(argsSetDataParser);
398- // Py_DECREF(setCloseLoop);
399- // Py_DECREF(trueTuple);
400- // Py_DECREF(pResult2);
401- //
402- // Py_DECREF(FieldlineModule);
403- // Py_DECREF(fService);
404- // Py_DECREF(ipList);
405- // Py_DECREF(fServiceInstance);
406- // Py_DECREF(openMethod);
407- // Py_DECREF(pResult);
408- //
397+
398+ Py_DECREF (parseCallbacksModule);
399+ Py_DECREF (FieldlineModule);
400+ Py_DECREF (fService );
401+ Py_DECREF (ipList);
402+ Py_DECREF (fServiceInstance );
403+ Py_DECREF (openMethod);
404+ Py_DECREF (pResult);
405+ Py_DECREF (setCloseLoop);
406+ Py_DECREF (trueTuple);
407+ Py_DECREF (pResult2);
408+ Py_DECREF (loadSensors);
409+ Py_DECREF (restartAllSensors);
410+ Py_DECREF (callback_on_finished);
411+ Py_DECREF (callback_on_error);
412+ Py_DECREF (callback_on_completion);
413+ Py_DECREF (argsRestart);
414+ Py_DECREF (resultRestart);
415+ Py_DECREF (readDataFcn);
416+ Py_DECREF (parserCallback);
417+ Py_DECREF (argsSetDataParser);
418+ Py_DECREF (result33);
419+
409420 m_pThreadState = (void *)PyEval_SaveThread ();
410421}
411422
412423FieldlineAcqSystem::~FieldlineAcqSystem ()
413424{
414425 PyEval_RestoreThread (reinterpret_cast <PyThreadState*>(m_pThreadState));
415- Py_DECREF (m_pCallbackModule);
416- Py_DECREF (m_pCallsModule);
426+
427+ Py_XDECREF (m_pCallbackModule);
428+ Py_XDECREF (m_pCallsModule);
429+
430+ if (m_samplesBlock) {
431+ delete[] m_samplesBlock;
432+ }
433+ if (m_samplesBlock2) {
434+ delete[] m_samplesBlock2;
435+ }
436+
417437 Py_Finalize ();
418438}
419439
@@ -473,6 +493,10 @@ void FieldlineAcqSystem::startADC() {
473493 printLog (" startResult ok" );
474494 }
475495
496+ Py_DECREF (argsStartData);
497+ Py_DECREF (zeroArg);
498+ Py_DECREF (startResult);
499+
476500 PyGILState_Release (gstate);
477501}
478502
@@ -492,6 +516,10 @@ void FieldlineAcqSystem::stopADC() {
492516 printLog (" stopResult ok" );
493517 }
494518
519+ Py_DECREF (argsstopData);
520+ Py_DECREF (stopArg);
521+ Py_DECREF (stopResult);
522+
495523 PyGILState_Release (gstate);
496524}
497525
@@ -506,6 +534,8 @@ void* FieldlineAcqSystem::loadModule(const char* moduleName)
506534 PyErr_Print ();
507535 }
508536
537+ Py_DECREF (pModule);
538+
509539 PyGILState_Release (gstate);
510540
511541 return (void *)pModule;
@@ -519,16 +549,14 @@ void* FieldlineAcqSystem::loadCModule(const char* moduleName, void*(*moduleInitF
519549 if (Py_IsInitialized ())
520550 {
521551 PyImport_AddModule (moduleName);
522- PyObject* pyModule = (PyObject*)moduleInitFunc ();
552+ PyObject* PyModule = (PyObject*)moduleInitFunc ();
523553 PyObject* sys_modules = PyImport_GetModuleDict ();
524- PyDict_SetItemString (sys_modules, moduleName, pyModule );
525- Py_DECREF (pyModule );
554+ PyDict_SetItemString (sys_modules, moduleName, PyModule );
555+ Py_DECREF (PyModule );
526556 } else {
527557 PyImport_AppendInittab (moduleName, (PyObject*(*)(void )) moduleInitFunc);
528558 }
529-
530559 PyGILState_Release (gstate);
531-
532560 return loadModule (moduleName);
533561}
534562
@@ -540,7 +568,7 @@ void FieldlineAcqSystem::callFunctionAsync(const char* moduleName, const char* f
540568 t.detach ();
541569}
542570
543- void FieldlineAcqSystem::callFunction (const std::string moduleName, const std::string funcName)
571+ void FieldlineAcqSystem::callFunction (const std::string& moduleName, const std::string& funcName)
544572{
545573 PyGILState_STATE gstate;
546574 gstate = PyGILState_Ensure ();
@@ -553,27 +581,25 @@ void FieldlineAcqSystem::callFunction(const std::string moduleName, const std::s
553581 if (pModule == NULL ) {
554582 PyErr_Print ();
555583 printLog (std::string (" Import failed. Can't find " ).append (moduleName).append (" ." ).c_str ());
584+ printLog (" Check the Path." );
556585 }
557586 }
558587
559588 PyObject* pFunc = PyObject_GetAttrString (pModule, funcName.c_str ());
560589 if (pFunc == NULL ) {
561590 printLog (std::string (" Error finding function: " ).append (funcName).c_str ());
562591 PyErr_Print ();
563- Py_DECREF (pModule);
564592 }
565593
566594 PyObject* pResult = PyObject_CallObject (pFunc, NULL );
567595 if (pResult == NULL ) {
568596 printLog (std::string (" Error calling function: " ).append (funcName).c_str ());
569597 PyErr_Print ();
570- Py_DECREF (pModule);
571- Py_DECREF (pFunc);
572598 }
573599
574- Py_DECREF (pModule);
575- Py_DECREF (pFunc);
576- Py_DECREF (pResult);
600+ Py_XDECREF (pModule);
601+ Py_XDECREF (pFunc);
602+ Py_XDECREF (pResult);
577603
578604 PyGILState_Release (gstate);
579605}
0 commit comments