]> sigrok.org Git - libsigrokdecode.git/blobdiff - instance.c
srd_decoder_unload_all(): Fix a -Wcast-function-type compiler warning.
[libsigrokdecode.git] / instance.c
index db6cbcaf9fb8d80351f100ac68d9f6b2227a9927..075bf09e45a3298662a82068b8c186dfe643c40f 100644 (file)
@@ -398,6 +398,7 @@ SRD_API struct srd_decoder_inst *srd_inst_new(struct srd_session *sess,
        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
@@ -471,6 +472,7 @@ static void srd_inst_reset_state(struct srd_decoder_inst *di)
        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. */
 }
 
@@ -576,62 +578,6 @@ SRD_API struct srd_decoder_inst *srd_inst_find_by_id(struct srd_session *sess,
        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.
  *
@@ -1088,6 +1034,9 @@ static gpointer di_thread(gpointer data)
        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
@@ -1328,7 +1277,7 @@ SRD_PRIV int srd_inst_terminate_reset(struct srd_decoder_inst *di)
                        return ret;
        }
 
-       return SRD_OK;
+       return di->decoder_state;
 }
 
 /** @private */