nfs4: Make idmapper initialization lazy

This commit is contained in:
Pawel Dziepak
2012-08-09 17:18:41 +02:00
parent f7c35cf464
commit 2431c4521c
3 changed files with 15 additions and 8 deletions
@@ -16,7 +16,8 @@
#include "idmapper/IdMapper.h"
IdMap* gIdMapper = NULL;
IdMap* gIdMapper = NULL;
mutex gIdMapperLock;
IdMap::IdMap()
@@ -41,6 +41,7 @@ private:
};
extern IdMap* gIdMapper;
extern mutex gIdMapperLock;
#endif // IDMAP_H
@@ -76,6 +76,12 @@ nfs4_mount(fs_volume* volume, const char* device, uint32 flags,
{
status_t result;
MutexLocker locker(gIdMapperLock);
gIdMapper = new(std::nothrow) IdMap;
if (gIdMapper == NULL)
return B_NO_MEMORY;
locker.Unlock();
ServerAddress address;
char path[256];
result = ParseArguments(args, &address, path);
@@ -706,23 +712,20 @@ nfs4_init()
if (gRPCServerManager == NULL)
return B_NO_MEMORY;
gIdMapper = new(std::nothrow) IdMap;
if (gIdMapper == NULL) {
delete gRPCServerManager;
return B_NO_MEMORY;
}
mutex_init(&gIdMapperLock, "idmapper Init Lock");
gIdMapper = NULL;
gWorkQueue = new(std::nothrow) WorkQueue;
if (gWorkQueue == NULL || gWorkQueue->InitStatus() != B_OK) {
delete gWorkQueue;
delete gIdMapper;
mutex_destroy(&gIdMapperLock);
delete gRPCServerManager;
return B_NO_MEMORY;
}
gRPCCallbackServer = new(std::nothrow) RPC::CallbackServer;
if (gRPCCallbackServer == NULL) {
delete gIdMapper;
mutex_destroy(&gIdMapperLock);
delete gWorkQueue;
delete gRPCServerManager;
return B_NO_MEMORY;
@@ -742,6 +745,8 @@ nfs4_uninit()
delete gWorkQueue;
delete gRPCServerManager;
mutex_destroy(&gIdMapperLock);
return B_OK;
}