core/AdminCache.cpp
changeset 438 e6e11c82d87e
parent 436 ffadb284461e
child 458 77520125ee67
     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