Make srd_inst_decode() return the actual decoder state, not SRD_OK
authorSoeren Apel <soeren@apelpie.net>
Mon, 9 Jul 2018 20:20:24 +0000 (22:20 +0200)
committerUwe Hermann <uwe@hermann-uwe.de>
Thu, 30 Aug 2018 09:56:38 +0000 (11:56 +0200)
instance.c
libsigrokdecode.h

index e4f8ff7797f2da6fbbdf8064c9561622e1f7a9d9..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. */
 }
 
@@ -1032,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
@@ -1272,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 */
index a26bce9a402ba720ac5e8c1141bccdd131b50966..deba470149306de3b30289affa6b7e38c53ee843 100644 (file)
@@ -277,6 +277,9 @@ struct srd_decoder_inst {
        /** Requests termination of wait() and decode(). */
        gboolean want_wait_terminate;
 
+       /** Indicates the current state of the decoder stack. */
+       int decoder_state;
+
        GCond got_new_samples_cond;
        GCond handled_all_samples_cond;
        GMutex data_mutex;