diff --git a/extern/limedriver b/extern/limedriver index f9d86bd..1eacc19 160000 --- a/extern/limedriver +++ b/extern/limedriver @@ -1 +1 @@ -Subproject commit f9d86bd4dea17250d9b0267936fb99d35a4ad1fd +Subproject commit 1eacc19c719445ddcceb276d9187e30f9f5c36d6 diff --git a/src/limedriver/limedriver.pyx b/src/limedriver/limedriver.pyx index f2d8728..144727f 100644 --- a/src/limedriver/limedriver.pyx +++ b/src/limedriver/limedriver.pyx @@ -95,7 +95,7 @@ cdef class PyLimeConfig: cdef LimeConfig_t* _config def __cinit__(self, Npulses): - self._config = malloc(sizeof(LimeConfig_t)) + self._config = PyMem_Malloc(sizeof(LimeConfig_t)) if self._config is NULL: raise MemoryError() @@ -103,79 +103,77 @@ cdef class PyLimeConfig: self._config.Npulses = Npulses # Allocate memory for string fields - self._config.file_pattern = malloc(256) - self._config.file_stamp = malloc(256) - self._config.save_path = malloc(256) - self._config.stamp_start = malloc(256) - self._config.stamp_end = malloc(256) + 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 = malloc(Npulses * sizeof(double)) - self._config.p_dur_smp = malloc(Npulses * sizeof(int)) - self._config.p_offs = malloc(Npulses * sizeof(int)) - self._config.p_amp = malloc(Npulses * sizeof(double)) - self._config.p_frq = malloc(Npulses * sizeof(double)) - self._config.p_frq_smp = malloc(Npulses * sizeof(double)) - self._config.p_pha = malloc(Npulses * sizeof(double)) - self._config.p_phacyc_N = malloc(Npulses * sizeof(int)) - self._config.p_phacyc_lev = malloc(Npulses * sizeof(int)) + 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 = malloc(Npulses * sizeof(double)) - self._config.am_pha = malloc(Npulses * sizeof(double)) - self._config.am_depth = malloc(Npulses * sizeof(double)) - self._config.am_mode = malloc(Npulses * sizeof(int)) - self._config.am_frq_smp = malloc(Npulses * sizeof(double)) - self._config.fm_frq = malloc(Npulses * sizeof(double)) - self._config.fm_pha = malloc(Npulses * sizeof(double)) - self._config.fm_width = malloc(Npulses * sizeof(double)) - self._config.fm_mode = malloc(Npulses * sizeof(int)) - self._config.fm_frq_smp = malloc(Npulses * sizeof(double)) - self._config.p_c0_en = malloc(Npulses * sizeof(int)) - self._config.p_c1_en = malloc(Npulses * sizeof(int)) - self._config.p_c2_en = malloc(Npulses * sizeof(int)) - self._config.p_c3_en = malloc(Npulses * sizeof(int)) - - # Memory for arrays with 4 elements - self._config.RX_gain_rback = malloc(4 * sizeof(int)) - self._config.TX_gain_rback = malloc(3 * sizeof(int)) - self._config.c0_tim = malloc(4 * sizeof(int)) - self._config.c1_tim = malloc(4 * sizeof(int)) - self._config.c2_tim = malloc(4 * sizeof(int)) - self._config.c3_tim = malloc(4 * sizeof(int)) - - # Memory for arrays with 5 elements - self._config.c0_synth = malloc(5 * sizeof(int)) - self._config.c1_synth = malloc(5 * sizeof(int)) - self._config.c2_synth = malloc(5 * sizeof(int)) - self._config.c3_synth = malloc(5 * 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: - free(self._config.p_frq) - free(self._config.p_dur) - free(self._config.p_dur_smp) - free(self._config.p_offs) - free(self._config.p_amp) - free(self._config.p_frq_smp) - free(self._config.p_pha) - free(self._config.p_phacyc_N) - free(self._config.p_phacyc_lev) - free(self._config.am_frq) - free(self._config.am_pha) - free(self._config.am_depth) - free(self._config.am_mode) - free(self._config.am_frq_smp) - free(self._config.fm_frq) - free(self._config.fm_pha) - free(self._config.fm_width) - free(self._config.fm_mode) - free(self._config.fm_frq_smp) - free(self._config.p_c0_en) - free(self._config.p_c1_en) - free(self._config.p_c2_en) - free(self._config.p_c3_en) + # 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) - free(self._config) + 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) @property