From e8ca434074a0a5e2319b2ced6c780f9228d07e01 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 25 Oct 2017 17:23:02 +0200 Subject: [PATCH] MINOR: threads: Don't start when device a detection module is used For now, we don't know if device detection modules (51degrees, deviceatlas and wurfl) are thread-safe or not. So HAproxy exits with an error when you try to use one of them with nbthread greater than 1. We will ask to maintainers of these modules to make them thread-safe or to give us hints to do so. --- src/51d.c | 5 +++++ src/da.c | 6 ++++++ src/wurfl.c | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/src/51d.c b/src/51d.c index 1f1a5f969..baeb2c277 100644 --- a/src/51d.c +++ b/src/51d.c @@ -547,6 +547,11 @@ static int init_51degrees(void) if (!global_51degrees.data_file_path) return 0; + if (global.nbthread > 1) { + Alert("51Degrees: multithreading is not supported for now.\n"); + return (ERR_FATAL | ERR_ALERT); + } + if (!LIST_ISEMPTY(&global_51degrees.property_names)) { i = 0; list_for_each_entry(name, &global_51degrees.property_names, list) diff --git a/src/da.c b/src/da.c index 856ef0dad..c31855d52 100644 --- a/src/da.c +++ b/src/da.c @@ -121,6 +121,12 @@ static int init_deviceatlas(void) size_t atlasimglen; da_status_t status; + if (global.nbthread > 1) { + Alert("deviceatlas: multithreading is not supported for now.\n"); + err_code |= ERR_ALERT | ERR_FATAL; + goto out; + } + jsonp = fopen(global_deviceatlas.jsonpath, "r"); if (jsonp == 0) { Alert("deviceatlas : '%s' json file has invalid path or is not readable.\n", diff --git a/src/wurfl.c b/src/wurfl.c index 5bd9a0c5a..0349a50f9 100644 --- a/src/wurfl.c +++ b/src/wurfl.c @@ -313,6 +313,11 @@ static int ha_wurfl_init(void) return ERR_WARN; } + if (global.nbthread > 1) { + Alert("WURFL: multithreading is not supported for now.\n"); + return (ERR_FATAL | ERR_ALERT); + } + if (wurfl_set_root(global_wurfl.handle, global_wurfl.data_file) != WURFL_OK) { Warning("WURFL: Engine setting root file failed - %s\n", wurfl_get_error_message(global_wurfl.handle)); send_log(NULL, LOG_WARNING, "WURFL: Engine setting root file failed - %s\n", wurfl_get_error_message(global_wurfl.handle));