]> sigrok.org Git - libsigrokdecode.git/commit
ir_irmp: enforce "one instance" limitation for IRMP library
authorGerhard Sittig <redacted>
Sat, 18 Jul 2020 11:15:41 +0000 (13:15 +0200)
committerGerhard Sittig <redacted>
Sat, 18 Jul 2020 13:48:50 +0000 (15:48 +0200)
commitf8c62753bc30432ef48c00d055551b33121b5535
treef53729ce5b7e7b3bc56cb8a6fe21f947e521fa86
parent8c3291c74998bddac4b355d2ffbaf94e22bad3a7
ir_irmp: enforce "one instance" limitation for IRMP library

The IRMP core library is not prepared for threading or interleaved use
by multiple call sites for different data streams, internal state is
kept in global vars (MCU project heritage). Adjust the Python wrapper,
create one usable instance, and several more which fail to execute.
Fail late such that users see error messages.

The approach isn't pretty, but avoids segfaults when re-loaded sessions
assign multiple decoder instances, and raises user's awareness of the
"one instance" limitation by established means: "decoder error" bar, and
log messages, with a description to point out the cause.

This commit implements a dirty modification of a singleton. It's a pity
that Python appears to lack reliable destruction, hence the whole class
remains blocked even if the instance is released. Move all library use
into pd.py:decode() in the hope that Python's 'with' could help in a
future implementation. Prepare to either present a generic message that
is generated by pd.py, or pass on a text that originates in the Python
wrapper for the C library.
decoders/ir_irmp/irmp_library.py
decoders/ir_irmp/pd.py