summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2018-11-04 12:48:59 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2018-11-04 11:49:42 +0100
commita2058e7516a01167c2d20ed157500b38db967c64 (patch)
tree375dc0fd109e36bc490ee7e04d2201cee10e4cf2 /extensions
parentb156ca6e4692c2a32f41b9dfcd543966efc64a5d (diff)
replace double-checked locking patterns with thread safe local statics
Change-Id: Ie1aae7ecbd065a88b371d8c0deb586f54f7eff65 Reviewed-on: https://gerrit.libreoffice.org/62835 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'extensions')
-rw-r--r--extensions/source/bibliography/framectr.cxx30
-rw-r--r--extensions/source/propctrlr/eventhandler.cxx87
2 files changed, 52 insertions, 65 deletions
diff --git a/extensions/source/bibliography/framectr.cxx b/extensions/source/bibliography/framectr.cxx
index b6bd50f6e67b..66fa470ca631 100644
--- a/extensions/source/bibliography/framectr.cxx
+++ b/extensions/source/bibliography/framectr.cxx
@@ -95,35 +95,25 @@ static const DispatchInfo SupportedCommandsArray[] =
{ ".uno:Bib/removeFilter" , frame::CommandGroup::DATA , true },
{ ".uno:Bib/sdbsource" , frame::CommandGroup::DATA , true },
{ ".uno:Bib/Mapping" , frame::CommandGroup::DATA , true },
- { nullptr , 0 , false }
};
typedef std::unordered_map< OUString, CacheDispatchInfo > CmdToInfoCache;
static const CmdToInfoCache& GetCommandToInfoCache()
{
- static bool bCacheInitialized = false;
- static CmdToInfoCache aCmdToInfoCache;
-
- if ( !bCacheInitialized )
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if ( !bCacheInitialized )
+ static CmdToInfoCache aCmdToInfoCache = []() {
+ CmdToInfoCache aCache;
+ for (const auto& command : SupportedCommandsArray)
{
- sal_Int32 i( 0 );
- while ( SupportedCommandsArray[i].pCommand != nullptr )
- {
- OUString aCommand( OUString::createFromAscii( SupportedCommandsArray[i].pCommand ));
+ OUString aCommand(OUString::createFromAscii(command.pCommand));
- CacheDispatchInfo aDispatchInfo;
- aDispatchInfo.nGroupId = SupportedCommandsArray[i].nGroupId;
- aDispatchInfo.bActiveConnection = SupportedCommandsArray[i].bActiveConnection;
- aCmdToInfoCache.emplace(aCommand, aDispatchInfo);
- ++i;
- }
- bCacheInitialized = true;
+ CacheDispatchInfo aDispatchInfo;
+ aDispatchInfo.nGroupId = command.nGroupId;
+ aDispatchInfo.bActiveConnection = command.bActiveConnection;
+ aCache.emplace(aCommand, aDispatchInfo);
}
- }
+ return aCache;
+ }();
return aCmdToInfoCache;
}
diff --git a/extensions/source/propctrlr/eventhandler.cxx b/extensions/source/propctrlr/eventhandler.cxx
index 544fb9b83c1d..224b4b77e3d9 100644
--- a/extensions/source/propctrlr/eventhandler.cxx
+++ b/extensions/source/propctrlr/eventhandler.cxx
@@ -154,56 +154,53 @@ namespace pcr
namespace
{
- #define DESCRIBE_EVENT( asciinamespace, asciilistener, asciimethod, id_postfix ) \
- s_aKnownEvents.emplace( \
+ #define DESCRIBE_EVENT( map, asciinamespace, asciilistener, asciimethod, id_postfix ) \
+ map.emplace( \
asciimethod, \
EventDescription( ++nEventId, asciinamespace, asciilistener, asciimethod, RID_STR_EVT_##id_postfix, HID_EVT_##id_postfix, UID_BRWEVT_##id_postfix ) )
bool lcl_getEventDescriptionForMethod( const OUString& _rMethodName, EventDescription& _out_rDescription )
{
- static EventMap s_aKnownEvents;
- if ( s_aKnownEvents.empty() )
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if ( s_aKnownEvents.empty() )
- {
- static sal_Int32 nEventId = 0;
-
- DESCRIBE_EVENT( "form", "XApproveActionListener", "approveAction", APPROVEACTIONPERFORMED );
- DESCRIBE_EVENT( "awt", "XActionListener", "actionPerformed", ACTIONPERFORMED );
- DESCRIBE_EVENT( "form", "XChangeListener", "changed", CHANGED );
- DESCRIBE_EVENT( "awt", "XTextListener", "textChanged", TEXTCHANGED );
- DESCRIBE_EVENT( "awt", "XItemListener", "itemStateChanged", ITEMSTATECHANGED );
- DESCRIBE_EVENT( "awt", "XFocusListener", "focusGained", FOCUSGAINED );
- DESCRIBE_EVENT( "awt", "XFocusListener", "focusLost", FOCUSLOST );
- DESCRIBE_EVENT( "awt", "XKeyListener", "keyPressed", KEYTYPED );
- DESCRIBE_EVENT( "awt", "XKeyListener", "keyReleased", KEYUP );
- DESCRIBE_EVENT( "awt", "XMouseListener", "mouseEntered", MOUSEENTERED );
- DESCRIBE_EVENT( "awt", "XMouseMotionListener", "mouseDragged", MOUSEDRAGGED );
- DESCRIBE_EVENT( "awt", "XMouseMotionListener", "mouseMoved", MOUSEMOVED );
- DESCRIBE_EVENT( "awt", "XMouseListener", "mousePressed", MOUSEPRESSED );
- DESCRIBE_EVENT( "awt", "XMouseListener", "mouseReleased", MOUSERELEASED );
- DESCRIBE_EVENT( "awt", "XMouseListener", "mouseExited", MOUSEEXITED );
- DESCRIBE_EVENT( "form", "XResetListener", "approveReset", APPROVERESETTED );
- DESCRIBE_EVENT( "form", "XResetListener", "resetted", RESETTED );
- DESCRIBE_EVENT( "form", "XSubmitListener", "approveSubmit", SUBMITTED );
- DESCRIBE_EVENT( "form", "XUpdateListener", "approveUpdate", BEFOREUPDATE );
- DESCRIBE_EVENT( "form", "XUpdateListener", "updated", AFTERUPDATE );
- DESCRIBE_EVENT( "form", "XLoadListener", "loaded", LOADED );
- DESCRIBE_EVENT( "form", "XLoadListener", "reloading", RELOADING );
- DESCRIBE_EVENT( "form", "XLoadListener", "reloaded", RELOADED );
- DESCRIBE_EVENT( "form", "XLoadListener", "unloading", UNLOADING );
- DESCRIBE_EVENT( "form", "XLoadListener", "unloaded", UNLOADED );
- DESCRIBE_EVENT( "form", "XConfirmDeleteListener", "confirmDelete", CONFIRMDELETE );
- DESCRIBE_EVENT( "sdb", "XRowSetApproveListener", "approveRowChange", APPROVEROWCHANGE );
- DESCRIBE_EVENT( "sdbc", "XRowSetListener", "rowChanged", ROWCHANGE );
- DESCRIBE_EVENT( "sdb", "XRowSetApproveListener", "approveCursorMove", POSITIONING );
- DESCRIBE_EVENT( "sdbc", "XRowSetListener", "cursorMoved", POSITIONED );
- DESCRIBE_EVENT( "form", "XDatabaseParameterListener", "approveParameter", APPROVEPARAMETER );
- DESCRIBE_EVENT( "sdb", "XSQLErrorListener", "errorOccured", ERROROCCURRED );
- DESCRIBE_EVENT( "awt", "XAdjustmentListener", "adjustmentValueChanged", ADJUSTMENTVALUECHANGED );
- }
- }
+ static EventMap s_aKnownEvents = []() {
+ EventMap aMap;
+ sal_Int32 nEventId = 0;
+
+ DESCRIBE_EVENT(aMap, "form", "XApproveActionListener", "approveAction", APPROVEACTIONPERFORMED);
+ DESCRIBE_EVENT(aMap, "awt", "XActionListener", "actionPerformed", ACTIONPERFORMED);
+ DESCRIBE_EVENT(aMap, "form", "XChangeListener", "changed", CHANGED);
+ DESCRIBE_EVENT(aMap, "awt", "XTextListener", "textChanged", TEXTCHANGED);
+ DESCRIBE_EVENT(aMap, "awt", "XItemListener", "itemStateChanged", ITEMSTATECHANGED);
+ DESCRIBE_EVENT(aMap, "awt", "XFocusListener", "focusGained", FOCUSGAINED);
+ DESCRIBE_EVENT(aMap, "awt", "XFocusListener", "focusLost", FOCUSLOST);
+ DESCRIBE_EVENT(aMap, "awt", "XKeyListener", "keyPressed", KEYTYPED);
+ DESCRIBE_EVENT(aMap, "awt", "XKeyListener", "keyReleased", KEYUP);
+ DESCRIBE_EVENT(aMap, "awt", "XMouseListener", "mouseEntered", MOUSEENTERED);
+ DESCRIBE_EVENT(aMap, "awt", "XMouseMotionListener", "mouseDragged", MOUSEDRAGGED);
+ DESCRIBE_EVENT(aMap, "awt", "XMouseMotionListener", "mouseMoved", MOUSEMOVED);
+ DESCRIBE_EVENT(aMap, "awt", "XMouseListener", "mousePressed", MOUSEPRESSED);
+ DESCRIBE_EVENT(aMap, "awt", "XMouseListener", "mouseReleased", MOUSERELEASED);
+ DESCRIBE_EVENT(aMap, "awt", "XMouseListener", "mouseExited", MOUSEEXITED);
+ DESCRIBE_EVENT(aMap, "form", "XResetListener", "approveReset", APPROVERESETTED);
+ DESCRIBE_EVENT(aMap, "form", "XResetListener", "resetted", RESETTED);
+ DESCRIBE_EVENT(aMap, "form", "XSubmitListener", "approveSubmit", SUBMITTED);
+ DESCRIBE_EVENT(aMap, "form", "XUpdateListener", "approveUpdate", BEFOREUPDATE);
+ DESCRIBE_EVENT(aMap, "form", "XUpdateListener", "updated", AFTERUPDATE);
+ DESCRIBE_EVENT(aMap, "form", "XLoadListener", "loaded", LOADED);
+ DESCRIBE_EVENT(aMap, "form", "XLoadListener", "reloading", RELOADING);
+ DESCRIBE_EVENT(aMap, "form", "XLoadListener", "reloaded", RELOADED);
+ DESCRIBE_EVENT(aMap, "form", "XLoadListener", "unloading", UNLOADING);
+ DESCRIBE_EVENT(aMap, "form", "XLoadListener", "unloaded", UNLOADED);
+ DESCRIBE_EVENT(aMap, "form", "XConfirmDeleteListener", "confirmDelete", CONFIRMDELETE);
+ DESCRIBE_EVENT(aMap, "sdb", "XRowSetApproveListener", "approveRowChange", APPROVEROWCHANGE);
+ DESCRIBE_EVENT(aMap, "sdbc", "XRowSetListener", "rowChanged", ROWCHANGE);
+ DESCRIBE_EVENT(aMap, "sdb", "XRowSetApproveListener", "approveCursorMove", POSITIONING);
+ DESCRIBE_EVENT(aMap, "sdbc", "XRowSetListener", "cursorMoved", POSITIONED);
+ DESCRIBE_EVENT(aMap, "form", "XDatabaseParameterListener", "approveParameter", APPROVEPARAMETER);
+ DESCRIBE_EVENT(aMap, "sdb", "XSQLErrorListener", "errorOccured", ERROROCCURRED);
+ DESCRIBE_EVENT(aMap, "awt", "XAdjustmentListener", "adjustmentValueChanged", ADJUSTMENTVALUECHANGED);
+
+ return aMap;
+ }();
EventMap::const_iterator pos = s_aKnownEvents.find( _rMethodName );
if ( pos == s_aKnownEvents.end() )