int64_t
MemStore::EntryLimit()
{
- if (!Config.memMaxSize)
+ if (!Config.memShared || !Config.memMaxSize)
return 0; // no memory cache configured
const int64_t entrySize = Ipc::Mem::PageSize(); // for now
}
-/// initializes shared memory segments used by MemStore
-class MemStoreRr: public Ipc::Mem::RegisteredRunner
+/// decides whether to use a shared memory cache or checks its configuration
+class MemStoreCfgRr: public ::RegisteredRunner
{
public:
/* RegisteredRunner API */
- MemStoreRr(): owner(NULL) {}
virtual void run(const RunnerRegistry &);
- virtual ~MemStoreRr();
-
-protected:
- virtual void create(const RunnerRegistry &);
-
-private:
- MemStoreMap::Owner *owner;
};
-RunnerRegistrationEntry(rrAfterConfig, MemStoreRr);
-
+RunnerRegistrationEntry(rrFinalizeConfig, MemStoreCfgRr);
-void MemStoreRr::run(const RunnerRegistry &r)
+void MemStoreCfgRr::run(const RunnerRegistry &r)
{
// decide whether to use a shared memory cache if the user did not specify
if (!Config.memShared.configured()) {
debugs(20, DBG_IMPORTANT, "WARNING: memory_cache_shared is on, but only"
" a single worker is running");
}
+}
+
+
+/// initializes shared memory segments used by MemStore
+class MemStoreRr: public Ipc::Mem::RegisteredRunner
+{
+public:
+ /* RegisteredRunner API */
+ MemStoreRr(): owner(NULL) {}
+ virtual void run(const RunnerRegistry &);
+ virtual ~MemStoreRr();
+
+protected:
+ virtual void create(const RunnerRegistry &);
+private:
+ MemStoreMap::Owner *owner;
+};
+
+RunnerRegistrationEntry(rrAfterConfig, MemStoreRr);
+
+
+void MemStoreRr::run(const RunnerRegistry &r)
+{
+ assert(Config.memShared.configured());
Ipc::Mem::RegisteredRunner::run(r);
}
/// well-known registries
typedef enum {
- /// managed by main.cc; activated after parsing squid.conf but
- /// before rrAfterConfig, deactivated after rrAfterConfig but
- /// before freeing configuration-related memory or exit()-ing
+ /// Managed by main.cc. Activated after parsing squid.conf and
+ /// deactivated before freeing configuration-related memory or exit()-ing.
+ /// Meant for setting configuration options that depend on other
+ /// configuration options and were not explicitly configured.
+ rrFinalizeConfig,
+
+ /// Managed by main.cc. Activated after rrFinalizeConfig and
+ /// deactivated before rrFinalizeConfig. Meant for announcing
+ /// memory reservations before memory is allocated.
rrClaimMemoryNeeds,
- /// managed by main.cc; activated after parsing squid.conf and
- /// deactivated before freeing configuration-related memory or exit()-ing
+ /// Managed by main.cc. Activated after rrClaimMemoryNeeds and
+ /// deactivated before rrClaimMemoryNeeds. Meant for activating
+ /// modules and features based on the finalized configuration.
rrAfterConfig,
rrEnd ///< not a real registry, just a label to mark the end of enum
debugs(1,2, HERE << "Doing post-config initialization\n");
leave_suid();
+ ActivateRegistered(rrFinalizeConfig);
ActivateRegistered(rrClaimMemoryNeeds);
ActivateRegistered(rrAfterConfig);
enter_suid();
leave_suid();
DeactivateRegistered(rrAfterConfig);
DeactivateRegistered(rrClaimMemoryNeeds);
+ DeactivateRegistered(rrFinalizeConfig);
enter_suid();
if (TheKids.someSignaled(SIGINT) || TheKids.someSignaled(SIGTERM)) {
DiskIOModule::FreeAllModules();
DeactivateRegistered(rrAfterConfig);
DeactivateRegistered(rrClaimMemoryNeeds);
+ DeactivateRegistered(rrFinalizeConfig);
#if LEAK_CHECK_MODE && 0 /* doesn't work at the moment */
configFreeMemory();