Project

General

Profile

Bug #3824

Potential race in WMessageResourceBundle with WServer::setLocalizedStrings

Added by Bruce Toll over 7 years ago. Updated over 7 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
02/25/2015
Due date:
% Done:

0%

Estimated time:

Description

For static resources where WServer::setLocalizedStrings is provided a WMessageResourceBundle on which refresh() has not been called, it appears that multiple threads can attempt to initialize the WMessageResourceBundle simultaneously. This can result in a segfault.

I noticed this with an earlier github version of Wt 3.3.3-25-g7023b38 when attempting to retrieve several static resources in parallel. I have attached a lightly edited backtrace demonstrating one failure path. I would have liked to provide a self-contained reproducible example, but hopefully this is sufficient.

NOTE: A workaround that seems to help is to call refresh() on the WMessageResourceBundle before passing it to setLocalizedStrings, e.g.

auto message_bundle = new WMessageResourceBundle();
message_bundle->use(server.appRoot() + "report");

// prevent race condition on first use of message_bundle
message_bundle->refresh();
server.setLocalizedStrings(message_bundle);

Files

backtrace_20150225c.txt (6.45 KB) backtrace_20150225c.txt Bruce Toll, 02/25/2015 10:05 PM

Also available in: Atom PDF