| 158 | } |
| 159 | |
| 160 | static void decoder_free(struct srd_decoder *dec) |
| 161 | { |
| 162 | PyGILState_STATE gstate; |
| 163 | |
| 164 | if (!dec) |
| 165 | return; |
| 166 | |
| 167 | gstate = PyGILState_Ensure(); |
| 168 | Py_XDECREF(dec->py_dec); |
| 169 | Py_XDECREF(dec->py_mod); |
| 170 | PyGILState_Release(gstate); |
| 171 | |
| 172 | g_slist_free_full(dec->options, &decoder_option_free); |
| 173 | g_slist_free_full(dec->binary, (GDestroyNotify)&g_strfreev); |
| 174 | g_slist_free_full(dec->annotation_rows, &annotation_row_free); |
| 175 | g_slist_free_full(dec->annotations, (GDestroyNotify)&g_strfreev); |
| 176 | g_slist_free_full(dec->opt_channels, &channel_free); |
| 177 | g_slist_free_full(dec->channels, &channel_free); |
| 178 | |
| 179 | g_slist_free_full(dec->outputs, g_free); |
| 180 | g_slist_free_full(dec->inputs, g_free); |
| 181 | g_slist_free_full(dec->tags, g_free); |
| 182 | g_free(dec->license); |
| 183 | g_free(dec->desc); |
| 184 | g_free(dec->longname); |
| 185 | g_free(dec->name); |
| 186 | g_free(dec->id); |
| 187 | |
| 188 | g_free(dec); |
| 189 | } |
| 190 | |
| 191 | static int get_channels(const struct srd_decoder *d, const char *attr, |
| 192 | GSList **out_pdchl, int offset) |
no outgoing calls
no test coverage detected