Skip to content

Commit 3e12c7a

Browse files
committed
review decref for pyobjects
1 parent 9b287ab commit 3e12c7a

File tree

2 files changed

+53
-27
lines changed

2 files changed

+53
-27
lines changed

src/applications/mne_scan/plugins/fieldline/fieldline_acqsystem.cpp

+52-26
Original file line numberDiff line numberDiff line change
@@ -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

412423
FieldlineAcqSystem::~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
}

src/applications/mne_scan/plugins/fieldline/fieldline_acqsystem.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class FieldlineAcqSystem {
4949

5050
void callFunctionAsync(const char* moduleName, const char* funcName);
5151

52-
void callFunction(const std::string moduleName, const std::string funcName);
52+
void callFunction(const std::string& moduleName, const std::string& funcName);
5353

5454
void setCallback();
5555
void startADC();

0 commit comments

Comments
 (0)