From 4ee709a7ce64f3861e569a791b12f724c2f280e1 Mon Sep 17 00:00:00 2001 From: jupfi Date: Fri, 9 Feb 2024 11:02:28 +0100 Subject: [PATCH] Fixed memory leakage. Thanks Kumi (Howdy Pardner)! Co-authored-by: Kumi --- src/limedriver/limedriver.pyx | 87 ++--------------------------------- 1 file changed, 4 insertions(+), 83 deletions(-) diff --git a/src/limedriver/limedriver.pyx b/src/limedriver/limedriver.pyx index 144727f..d8d6e47 100644 --- a/src/limedriver/limedriver.pyx +++ b/src/limedriver/limedriver.pyx @@ -92,89 +92,10 @@ cdef extern from "limedriver.h": cdef class PyLimeConfig: - cdef LimeConfig_t* _config + cdef LimeConfig_t _config def __cinit__(self, Npulses): - self._config = PyMem_Malloc(sizeof(LimeConfig_t)) - if self._config is NULL: - raise MemoryError() - - # Set Npulses - self._config.Npulses = Npulses - - # Allocate memory for string fields - self._config.file_pattern = PyMem_Malloc(256) - self._config.file_stamp = PyMem_Malloc(256) - self._config.save_path = PyMem_Malloc(256) - self._config.stamp_start = PyMem_Malloc(256) - self._config.stamp_end = PyMem_Malloc(256) - - # Allocate memory for arrays with Npulses elements - self._config.p_dur = PyMem_Malloc(Npulses * sizeof(double)) - self._config.p_dur_smp = PyMem_Malloc(Npulses * sizeof(int)) - self._config.p_offs = PyMem_Malloc(Npulses * sizeof(int)) - self._config.p_amp = PyMem_Malloc(Npulses * sizeof(double)) - self._config.p_frq = PyMem_Malloc(Npulses * sizeof(double)) - self._config.p_frq_smp = PyMem_Malloc(Npulses * sizeof(double)) - self._config.p_pha = PyMem_Malloc(Npulses * sizeof(double)) - self._config.p_phacyc_N = PyMem_Malloc(Npulses * sizeof(int)) - self._config.p_phacyc_lev = PyMem_Malloc(Npulses * sizeof(int)) - - self._config.am_frq = PyMem_Malloc(Npulses * sizeof(double)) - self._config.am_pha = PyMem_Malloc(Npulses * sizeof(double)) - self._config.am_depth = PyMem_Malloc(Npulses * sizeof(double)) - self._config.am_mode = PyMem_Malloc(Npulses * sizeof(int)) - self._config.am_frq_smp = PyMem_Malloc(Npulses * sizeof(double)) - self._config.fm_frq = PyMem_Malloc(Npulses * sizeof(double)) - self._config.fm_pha = PyMem_Malloc(Npulses * sizeof(double)) - self._config.fm_width = PyMem_Malloc(Npulses * sizeof(double)) - self._config.fm_mode = PyMem_Malloc(Npulses * sizeof(int)) - self._config.fm_frq_smp = PyMem_Malloc(Npulses * sizeof(double)) - self._config.p_c0_en = PyMem_Malloc(Npulses * sizeof(int)) - self._config.p_c1_en = PyMem_Malloc(Npulses * sizeof(int)) - self._config.p_c2_en = PyMem_Malloc(Npulses * sizeof(int)) - self._config.p_c3_en = PyMem_Malloc(Npulses * sizeof(int)) - - def __dealloc__(self): - if self._config is not NULL: - # Memory for arrays with Npulses elements - PyMem_Free(self._config.p_frq) - PyMem_Free(self._config.p_dur_smp) - PyMem_Free(self._config.p_offs) - PyMem_Free(self._config.p_amp) - PyMem_Free(self._config.p_frq_smp) - PyMem_Free(self._config.p_pha) - PyMem_Free(self._config.p_phacyc_N) - PyMem_Free(self._config.p_phacyc_lev) - - PyMem_Free(self._config.am_frq) - PyMem_Free(self._config.am_pha) - PyMem_Free(self._config.am_depth) - PyMem_Free(self._config.am_mode) - PyMem_Free(self._config.am_frq_smp) - PyMem_Free(self._config.fm_frq) - PyMem_Free(self._config.fm_pha) - PyMem_Free(self._config.fm_width) - PyMem_Free(self._config.fm_mode) - PyMem_Free(self._config.fm_frq_smp) - - PyMem_Free(self._config.p_c0_en) - PyMem_Free(self._config.p_c1_en) - PyMem_Free(self._config.p_c2_en) - PyMem_Free(self._config.p_c3_en) - - print("Freeing string fields") - # Memory for string fields - PyMem_Free(&self._config.file_pattern) - PyMem_Free(&self._config.file_stamp) - PyMem_Free(&self._config.save_path) - PyMem_Free(&self._config.stamp_start) - PyMem_Free(&self._config.stamp_end) - - print("Freeing LimeConfig_t") - # Free the main structure - PyMem_Free(self._config) - + self._config = initializeLimeConfig(Npulses) @property def srate(self): @@ -826,9 +747,9 @@ cdef class PyLimeConfig: return instance def run(self): - return run_experiment_from_LimeCfg(self._config[0]) + return run_experiment_from_LimeCfg(self._config) def get_path(self): path = self.save_path + self.file_stamp + '_' + self.file_pattern + '.h5' path = pathlib.Path(path).absolute() - return path \ No newline at end of file + return path