From 27a86cefb655ecdfb8d912a5388fe8768b264ff5 Mon Sep 17 00:00:00 2001 From: Gerhard Sittig Date: Mon, 3 Oct 2022 18:23:34 +0200 Subject: type_decoder: update .samplenum before ending .wait() with EOFError When the protocol decoder's input data is exhausted, then the .wait() method will raise the EOFError exception. Python decoders can catch this exception and handle the condition. For proper annotation emission it is essential that the self.samplenum value corresponds to the last position in the input stream. Update it before returning from the .wait() call. --- type_decoder.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/type_decoder.c b/type_decoder.c index 6c6eab6..cf7ec8e 100644 --- a/type_decoder.c +++ b/type_decoder.c @@ -1098,6 +1098,11 @@ static PyObject *Decoder_wait(PyObject *self, PyObject *args) * when the sample data is exhausted. */ if (di->communicate_eof) { + /* Advance self.samplenum to the (absolute) last sample number. */ + py_samplenum = PyLong_FromUnsignedLongLong(di->abs_cur_samplenum); + PyObject_SetAttrString(di->py_inst, "samplenum", py_samplenum); + Py_DECREF(py_samplenum); + /* Raise an EOFError Python exception. */ srd_dbg("%s: %s: Raising EOF from wait().", di->inst_id, __func__); g_mutex_unlock(&di->data_mutex); -- cgit v1.2.3-70-g09d2