diff --git a/contrib/epee/include/reg_exp_definer.h b/contrib/epee/include/reg_exp_definer.h index e2bed5c3..807e188e 100644 --- a/contrib/epee/include/reg_exp_definer.h +++ b/contrib/epee/include/reg_exp_definer.h @@ -44,12 +44,17 @@ namespace epee const static global_regexp_critical_section gregexplock; + inline const boost::regex* build_regexp(const char* p, boost::regex::flag_type f) + { + return new boost::regex(p, f); + } + #define STATIC_REGEXP_EXPR_1(var_name, xpr_text, reg_exp_flags) \ static volatile uint32_t regexp_initialized_1 = 0;\ volatile uint32_t local_is_initialized_1 = regexp_initialized_1;\ if(!local_is_initialized_1)\ gregexplock.get_lock().lock();\ - static const boost::regex var_name(xpr_text , reg_exp_flags);\ + static const boost::regex& var_name = *build_regexp(xpr_text, reg_exp_flags);\ if(!local_is_initialized_1)\ {\ boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_1, 1);\ @@ -61,19 +66,32 @@ namespace epee volatile uint32_t local_is_initialized_2 = regexp_initialized_2;\ if(!local_is_initialized_2)\ gregexplock.get_lock().lock().lock();\ - static const boost::regex var_name(xpr_text , reg_exp_flags);\ + static const boost::regex& var_name = *build_regexp(xpr_text, reg_exp_flags);\ if(!local_is_initialized_2)\ {\ boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_2, 1);\ gregexplock.get_lock().lock().unlock();\ } +// #define STATIC_REGEXP_EXPR_2(var_name, xpr_text, reg_exp_flags) \ +// static volatile uint32_t regexp_initialized_2 = 0;\ +// volatile uint32_t local_is_initialized_2 = regexp_initialized_2;\ +// if(!local_is_initialized_2)\ +// gregexplock.get_lock().lock().lock();\ +// static const boost::regex var_name(xpr_text , reg_exp_flags);\ +// if(!local_is_initialized_2)\ +// {\ +// boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_2, 1);\ +// gregexplock.get_lock().lock().unlock();\ +// } + + #define STATIC_REGEXP_EXPR_3(var_name, xpr_text, reg_exp_flags) \ static volatile uint32_t regexp_initialized_3 = 0;\ volatile uint32_t local_is_initialized_3 = regexp_initialized_3;\ if(!local_is_initialized_3)\ gregexplock.get_lock().lock().lock();\ - static const boost::regex var_name(xpr_text , reg_exp_flags);\ + static const boost::regex& var_name = *build_regexp(xpr_text, reg_exp_flags);\ if(!local_is_initialized_3)\ {\ boost::interprocess::ipcdetail::atomic_write32(®exp_initialized_3, 1);\