static void srd_inst_join_decode_thread(struct srd_decoder_inst *di);
static void srd_inst_reset_state(struct srd_decoder_inst *di);
-SRD_PRIV void oldpins_array_seed(struct srd_decoder_inst *di);
-SRD_PRIV void oldpins_array_free(struct srd_decoder_inst *di);
+static void oldpins_array_seed(struct srd_decoder_inst *di);
+static void oldpins_array_free(struct srd_decoder_inst *di);
/** @endcond */
di->got_new_samples = FALSE;
di->handled_all_samples = FALSE;
di->want_wait_terminate = FALSE;
+ di->decoder_state = SRD_OK;
/*
* Strictly speaking initialization of statically allocated
di->got_new_samples = FALSE;
di->handled_all_samples = FALSE;
di->want_wait_terminate = FALSE;
+ di->decoder_state = SRD_OK;
/* Conditions and mutex got reset after joining the thread. */
}
return di;
}
-static struct srd_decoder_inst *srd_sess_inst_find_by_obj(
- struct srd_session *sess, const GSList *stack,
- const PyObject *obj)
-{
- const GSList *l;
- struct srd_decoder_inst *tmp, *di;
-
- if (!sess)
- return NULL;
-
- di = NULL;
- for (l = stack ? stack : sess->di_list; di == NULL && l != NULL; l = l->next) {
- tmp = l->data;
- if (tmp->py_inst == obj)
- di = tmp;
- else if (tmp->next_di)
- di = srd_sess_inst_find_by_obj(sess, tmp->next_di, obj);
- }
-
- return di;
-}
-
-/**
- * Find a decoder instance by its Python object.
- *
- * I.e. find that instance's instantiation of the sigrokdecode.Decoder class.
- * This will recurse to find the instance anywhere in the stack tree of all
- * sessions.
- *
- * @param stack Pointer to a GSList of struct srd_decoder_inst, indicating the
- * stack to search. To start searching at the bottom level of
- * decoder instances, pass NULL.
- * @param obj The Python class instantiation.
- *
- * @return Pointer to struct srd_decoder_inst, or NULL if not found.
- *
- * @private
- *
- * @since 0.1.0
- */
-SRD_PRIV struct srd_decoder_inst *srd_inst_find_by_obj(const GSList *stack,
- const PyObject *obj)
-{
- struct srd_decoder_inst *di;
- struct srd_session *sess;
- GSList *l;
-
- di = NULL;
- for (l = sessions; di == NULL && l != NULL; l = l->next) {
- sess = l->data;
- di = srd_sess_inst_find_by_obj(sess, stack, obj);
- }
-
- return di;
-}
-
/**
* Set the list of initial (assumed) pin values.
*
return SRD_OK;
}
-/** @private */
-SRD_PRIV void oldpins_array_seed(struct srd_decoder_inst *di)
+static void oldpins_array_seed(struct srd_decoder_inst *di)
{
size_t count;
GArray *arr;
di->old_pins_array = arr;
}
-/** @private */
-SRD_PRIV void oldpins_array_free(struct srd_decoder_inst *di)
+static void oldpins_array_free(struct srd_decoder_inst *di)
{
if (!di)
return;
py_res = PyObject_CallMethod(di->py_inst, "decode", NULL);
srd_dbg("%s: decode() method terminated.", di->inst_id);
+ if (!py_res)
+ di->decoder_state = SRD_ERR;
+
/*
* Make sure to unblock potentially pending srd_inst_decode()
* calls in application threads after the decode() method might
return ret;
}
- return SRD_OK;
+ return di->decoder_state;
}
/** @private */