commit e556f947fcb7b5bfe5545d823ff9f3d9fd5270d1
parent d32eda769d1fe77378d3bd318c12c0135b5cba9f
Author: Ricard Wanderlof <polluxsynth@butoba.net>
Date: Mon, 11 Apr 2022 06:57:55 +0200
MiddleWare: Use lookahead read while waiting for /state_frozen
Use newly introduced lookahead read in ThreadLink to read
message buffer while looking for /state_frozen from backend,
while leaving the messages in the buffer for later processing.
Diffstat:
1 file changed, 4 insertions(+), 26 deletions(-)
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -2047,20 +2047,15 @@ void MiddleWareImpl::doReadOnlyOp(std::function<void()> read_only_fn)
assert(uToB);
uToB->write("/freeze_state","");
- std::list<const char *> fico;
int tries = 0;
while(tries++ < 10000) {
- if(!bToU->hasNext()) {
+ if(!bToU->hasNextLookahead()) {
os_usleep(500);
continue;
}
- const char *msg = bToU->read();
+ const char *msg = bToU->read_lookahead();
if(!strcmp("/state_frozen", msg))
break;
- size_t bytes = rtosc_message_length(msg, bToU->buffer_size());
- char *save_buf = new char[bytes];
- memcpy(save_buf, msg, bytes);
- fico.push_back(save_buf);
}
assert(tries < 10000);//if this happens, the backend must be dead
@@ -2072,10 +2067,6 @@ void MiddleWareImpl::doReadOnlyOp(std::function<void()> read_only_fn)
//Now to resume normal operations
uToB->write("/thaw_state","");
- for(auto x:fico) {
- bToUhandle(x);
- delete [] x;
- }
}
//Offline detection code:
@@ -2160,29 +2151,20 @@ bool MiddleWareImpl::doReadOnlyOpNormal(std::function<void()> read_only_fn, bool
assert(uToB);
uToB->write("/freeze_state","");
- std::list<const char *> fico;
int tries = 0;
while(tries++ < 2000) {
- if(!bToU->hasNext()) {
+ if(!bToU->hasNextLookahead()) {
os_usleep(500);
continue;
}
- const char *msg = bToU->read();
+ const char *msg = bToU->read_lookahead();
if(!strcmp("/state_frozen", msg))
break;
- size_t bytes = rtosc_message_length(msg, bToU->buffer_size());
- char *save_buf = new char[bytes];
- memcpy(save_buf, msg, bytes);
- fico.push_back(save_buf);
}
if(canfail) {
//Now to resume normal operations
uToB->write("/thaw_state","");
- for(auto x:fico) {
- bToUhandle(x);
- delete [] x;
- }
return false;
}
@@ -2195,10 +2177,6 @@ bool MiddleWareImpl::doReadOnlyOpNormal(std::function<void()> read_only_fn, bool
//Now to resume normal operations
uToB->write("/thaw_state","");
- for(auto x:fico) {
- bToUhandle(x);
- delete [] x;
- }
return true;
}