]> sigrok.org Git - libsigrokdecode.git/blobdiff - instance.c
instance.c: Make oldpins_array_*() static.
[libsigrokdecode.git] / instance.c
index db6cbcaf9fb8d80351f100ac68d9f6b2227a9927..b964534aa1f21727f4cabf33076fca62014d48ce 100644 (file)
@@ -32,8 +32,8 @@ extern SRD_PRIV GSList *sessions;
 
 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 */
 
@@ -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.
  *
@@ -681,8 +627,7 @@ SRD_API int srd_inst_initial_pins_set_all(struct srd_decoder_inst *di, GArray *i
        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;
@@ -700,8 +645,7 @@ SRD_PRIV void oldpins_array_seed(struct srd_decoder_inst *di)
        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;
@@ -1088,6 +1032,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 +1275,7 @@ SRD_PRIV int srd_inst_terminate_reset(struct srd_decoder_inst *di)
                        return ret;
        }
 
-       return SRD_OK;
+       return di->decoder_state;
 }
 
 /** @private */