1.1 --- a/core/AdminCache.cpp Tue Feb 06 05:07:49 2007 +0000
1.2 +++ b/core/AdminCache.cpp Tue Feb 06 05:13:24 2007 +0000
1.3 @@ -35,11 +35,12 @@
1.4
1.5 AdminCache::~AdminCache()
1.6 {
1.7 + DumpAdminCache(AdminCache_Overrides, false);
1.8 + DumpAdminCache(AdminCache_Groups, false);
1.9 +
1.10 sm_trie_destroy(m_pCmdGrpOverrides);
1.11 sm_trie_destroy(m_pCmdOverrides);
1.12
1.13 - DumpAdminCache(0xFFFFFFFF, false);
1.14 -
1.15 if (m_pGroups)
1.16 {
1.17 sm_trie_destroy(m_pGroups);
1.18 @@ -759,39 +760,52 @@
1.19 }
1.20 }
1.21
1.22 -void AdminCache::DumpAdminCache(int cache_flags, bool rebuild)
1.23 +void AdminCache::DumpAdminCache(AdminCachePart part, bool rebuild)
1.24 {
1.25 - if (cache_flags & ADMIN_CACHE_OVERRIDES)
1.26 + List<IAdminListener *>::iterator iter;
1.27 + IAdminListener *pListener;
1.28 + cell_t result;
1.29 +
1.30 + if (part == AdminCache_Overrides)
1.31 {
1.32 DumpCommandOverrideCache(Override_Command);
1.33 DumpCommandOverrideCache(Override_CommandGroup);
1.34 - }
1.35 -
1.36 - /* This will auto-invalidate the admin cache */
1.37 - if (cache_flags & ADMIN_CACHE_GROUPS)
1.38 - {
1.39 - InvalidateGroupCache();
1.40 - }
1.41 -
1.42 - /* If we only requested an admin rebuild, re-use the internal memory */
1.43 - if (((cache_flags & ADMIN_CACHE_ADMINS) == ADMIN_CACHE_ADMINS)
1.44 - && ((cache_flags & (1<<2)) != (1<<2)))
1.45 - {
1.46 + if (rebuild)
1.47 + {
1.48 + for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
1.49 + {
1.50 + pListener = (*iter);
1.51 + pListener->OnRebuildOverrideCache();
1.52 + }
1.53 + m_pCacheFwd->PushCell(part);
1.54 + m_pCacheFwd->Execute(&result);
1.55 + }
1.56 + } else if (part == AdminCache_Groups || part == AdminCache_Admins) {
1.57 + if (part == AdminCache_Groups)
1.58 + {
1.59 + InvalidateGroupCache();
1.60 + if (rebuild)
1.61 + {
1.62 + for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
1.63 + {
1.64 + pListener = (*iter);
1.65 + pListener->OnRebuildGroupCache();
1.66 + }
1.67 + m_pCacheFwd->PushCell(part);
1.68 + m_pCacheFwd->Execute(&result);
1.69 + }
1.70 + }
1.71 InvalidateAdminCache(true);
1.72 - }
1.73 -
1.74 - if (rebuild)
1.75 - {
1.76 - List<IAdminListener *>::iterator iter;
1.77 - IAdminListener *pListener;
1.78 - cell_t result;
1.79 - for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
1.80 + if (rebuild)
1.81 {
1.82 - pListener = (*iter);
1.83 - pListener->OnRebuildAdminCache(cache_flags);
1.84 + for (iter=m_hooks.begin(); iter!=m_hooks.end(); iter++)
1.85 + {
1.86 + pListener = (*iter);
1.87 + pListener->OnRebuildAdminCache((part == AdminCache_Groups));
1.88 + }
1.89 + m_pCacheFwd->PushCell(AdminCache_Admins);
1.90 + m_pCacheFwd->Execute(&result);
1.91 }
1.92 - m_pCacheFwd->PushCell(cache_flags);
1.93 - m_pCacheFwd->Execute(&result);
1.94 }
1.95 }
1.96