]> git.ipfire.org Git - thirdparty/squid.git/blame - src/DiskIO/DiskIOModule.cc
Boilerplate: update copyright blurbs on src/
[thirdparty/squid.git] / src / DiskIO / DiskIOModule.cc
CommitLineData
b9ae18aa 1/*
bbc27441 2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
b9ae18aa 3 *
bbc27441
AJ
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
b9ae18aa 7 */
8
bbc27441
AJ
9/* DEBUG: section 92 Storage File System */
10
582c2af2 11#include "squid.h"
b9ae18aa 12#include "DiskIOModule.h"
13
c8ea3cc0 14std::vector<DiskIOModule*> *DiskIOModule::_Modules = NULL;
b9ae18aa 15
16//DiskIOModule() : initialised (false) {}
09c5ae5a 17
b9ae18aa 18DiskIOModule::DiskIOModule()
19{
09c5ae5a
AJ
20 /** We cannot call ModuleAdd(*this)
21 * here as the virtual methods are not yet available.
22 * We leave that to PokeAllModules() later.
b9ae18aa 23 */
24}
25
26void
27DiskIOModule::SetupAllModules()
28{
09c5ae5a
AJ
29 DiskIOModule::PokeAllModules();
30
b9ae18aa 31 for (iterator i = GetModules().begin(); i != GetModules().end(); ++i)
32 /* Call the FS to set up capabilities and initialize the FS driver */
33 (*i)->init();
34}
35
36void
37DiskIOModule::ModuleAdd(DiskIOModule &instance)
38{
39 iterator i = GetModules().begin();
40
41 while (i != GetModules().end()) {
42 assert(strcmp((*i)->type(), instance.type()) != 0);
43 ++i;
44 }
45
46 GetModules().push_back (&instance);
47}
48
c8ea3cc0 49std::vector<DiskIOModule *> const &
b9ae18aa 50DiskIOModule::Modules()
51{
52 return GetModules();
53}
54
c8ea3cc0 55std::vector<DiskIOModule*> &
b9ae18aa 56DiskIOModule::GetModules()
57{
58 if (!_Modules)
c8ea3cc0 59 _Modules = new std::vector<DiskIOModule *>;
b9ae18aa 60
61 return *_Modules;
62}
63
09c5ae5a
AJ
64/**
65 * Called when a graceful shutdown is to occur
b9ae18aa 66 * of each fs module.
67 */
68void
69DiskIOModule::FreeAllModules()
70{
385acf91 71 while (!GetModules().empty()) {
b9ae18aa 72 DiskIOModule *fs = GetModules().back();
73 GetModules().pop_back();
1e1a9021 74 fs->gracefulShutdown();
b9ae18aa 75 }
76}
77
78DiskIOModule *
79DiskIOModule::Find(char const *type)
80{
81 for (iterator i = GetModules().begin(); i != GetModules().end(); ++i)
82 if (strcasecmp(type, (*i)->type()) == 0)
83 return *i;
84
85 return NULL;
86}
62ee09ca 87
b7717b61 88DiskIOModule *
89DiskIOModule::FindDefault()
90{
09c5ae5a 91 /** Best IO options are in order: */
b7717b61 92 DiskIOModule * result;
93 result = Find("DiskThreads");
94 if (NULL == result)
95 result = Find("DiskDaemon");
96 if (NULL == result)
97 result = Find("AIO");
98 if (NULL == result)
99 result = Find("Blocking");
100 return result;
101}