Made Server::postAll call safer, fixes #126

This commit is contained in:
emeric
2021-03-17 15:15:36 +01:00
parent 0414f36fb0
commit 1ea3a619b9
+14 -4
View File
@@ -124,9 +124,19 @@ static
void void
proxyScannerEventsToApplication(Scanner::IScanner& scanner, Wt::WServer& server) proxyScannerEventsToApplication(Scanner::IScanner& scanner, Wt::WServer& server)
{ {
auto postAll {[](Wt::WServer& server, std::function<void()> cb)
{
server.postAll([cb = std::move(cb)]
{
// may be nullptr, see https://redmine.webtoolkit.eu/issues/8202
if (LmsApp)
cb();
});
}};
scanner.getEvents().scanStarted.connect([&] scanner.getEvents().scanStarted.connect([&]
{ {
server.postAll([] postAll(server, []
{ {
LmsApp->getScannerEvents().scanStarted.emit(); LmsApp->getScannerEvents().scanStarted.emit();
LmsApp->triggerUpdate(); LmsApp->triggerUpdate();
@@ -135,7 +145,7 @@ proxyScannerEventsToApplication(Scanner::IScanner& scanner, Wt::WServer& server)
scanner.getEvents().scanComplete.connect([&] (const Scanner::ScanStats& stats) scanner.getEvents().scanComplete.connect([&] (const Scanner::ScanStats& stats)
{ {
server.postAll([=] postAll(server, [=]
{ {
LmsApp->getScannerEvents().scanComplete.emit(stats); LmsApp->getScannerEvents().scanComplete.emit(stats);
LmsApp->triggerUpdate(); LmsApp->triggerUpdate();
@@ -144,7 +154,7 @@ proxyScannerEventsToApplication(Scanner::IScanner& scanner, Wt::WServer& server)
scanner.getEvents().scanInProgress.connect([&] (const Scanner::ScanStepStats& stats) scanner.getEvents().scanInProgress.connect([&] (const Scanner::ScanStepStats& stats)
{ {
server.postAll([=] postAll(server, [=]
{ {
LmsApp->getScannerEvents().scanInProgress.emit(stats); LmsApp->getScannerEvents().scanInProgress.emit(stats);
LmsApp->triggerUpdate(); LmsApp->triggerUpdate();
@@ -153,7 +163,7 @@ proxyScannerEventsToApplication(Scanner::IScanner& scanner, Wt::WServer& server)
scanner.getEvents().scanScheduled.connect([&] (const Wt::WDateTime dateTime) scanner.getEvents().scanScheduled.connect([&] (const Wt::WDateTime dateTime)
{ {
server.postAll([=] postAll(server, [=]
{ {
LmsApp->getScannerEvents().scanScheduled.emit(dateTime); LmsApp->getScannerEvents().scanScheduled.emit(dateTime);
LmsApp->triggerUpdate(); LmsApp->triggerUpdate();