inverter.cpp: avoid mess with simultaneous read/write operations #77
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When many inverter_poller at the same time send commands, the result is undefined.
This locks exclusively the configuration file, while the process is running, so that simultaneous instances have to wait until the file is released.
For some reason locking the device /dev/hidraw0 does not work for me, I get sometimes the output from previous runs. I suspect that when
cInverter::query()
does exceed the 2s timeout, it quits, and leaves theresponse of its commands on the wire. For fd = /dev/hidraw0:
tcflush(fd, TCOFLUSH);
has no effect.As a matter of fact, on my system I have increased the timeout in
cInverter::query()
to 15s and now it does always work correctly.Also the program, when called with -1, could exit, while the thread is receiving data, this leaves the next invocation with some ready-data, which it is not expecting.