nfs4: Make idmapper initialization lazy
This commit is contained in:
@@ -16,7 +16,8 @@
|
|||||||
#include "idmapper/IdMapper.h"
|
#include "idmapper/IdMapper.h"
|
||||||
|
|
||||||
|
|
||||||
IdMap* gIdMapper = NULL;
|
IdMap* gIdMapper = NULL;
|
||||||
|
mutex gIdMapperLock;
|
||||||
|
|
||||||
|
|
||||||
IdMap::IdMap()
|
IdMap::IdMap()
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern IdMap* gIdMapper;
|
extern IdMap* gIdMapper;
|
||||||
|
extern mutex gIdMapperLock;
|
||||||
|
|
||||||
|
|
||||||
#endif // IDMAP_H
|
#endif // IDMAP_H
|
||||||
|
|||||||
@@ -76,6 +76,12 @@ nfs4_mount(fs_volume* volume, const char* device, uint32 flags,
|
|||||||
{
|
{
|
||||||
status_t result;
|
status_t result;
|
||||||
|
|
||||||
|
MutexLocker locker(gIdMapperLock);
|
||||||
|
gIdMapper = new(std::nothrow) IdMap;
|
||||||
|
if (gIdMapper == NULL)
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
locker.Unlock();
|
||||||
|
|
||||||
ServerAddress address;
|
ServerAddress address;
|
||||||
char path[256];
|
char path[256];
|
||||||
result = ParseArguments(args, &address, path);
|
result = ParseArguments(args, &address, path);
|
||||||
@@ -706,23 +712,20 @@ nfs4_init()
|
|||||||
if (gRPCServerManager == NULL)
|
if (gRPCServerManager == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
gIdMapper = new(std::nothrow) IdMap;
|
mutex_init(&gIdMapperLock, "idmapper Init Lock");
|
||||||
if (gIdMapper == NULL) {
|
gIdMapper = NULL;
|
||||||
delete gRPCServerManager;
|
|
||||||
return B_NO_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
gWorkQueue = new(std::nothrow) WorkQueue;
|
gWorkQueue = new(std::nothrow) WorkQueue;
|
||||||
if (gWorkQueue == NULL || gWorkQueue->InitStatus() != B_OK) {
|
if (gWorkQueue == NULL || gWorkQueue->InitStatus() != B_OK) {
|
||||||
delete gWorkQueue;
|
delete gWorkQueue;
|
||||||
delete gIdMapper;
|
mutex_destroy(&gIdMapperLock);
|
||||||
delete gRPCServerManager;
|
delete gRPCServerManager;
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
gRPCCallbackServer = new(std::nothrow) RPC::CallbackServer;
|
gRPCCallbackServer = new(std::nothrow) RPC::CallbackServer;
|
||||||
if (gRPCCallbackServer == NULL) {
|
if (gRPCCallbackServer == NULL) {
|
||||||
delete gIdMapper;
|
mutex_destroy(&gIdMapperLock);
|
||||||
delete gWorkQueue;
|
delete gWorkQueue;
|
||||||
delete gRPCServerManager;
|
delete gRPCServerManager;
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
@@ -742,6 +745,8 @@ nfs4_uninit()
|
|||||||
delete gWorkQueue;
|
delete gWorkQueue;
|
||||||
delete gRPCServerManager;
|
delete gRPCServerManager;
|
||||||
|
|
||||||
|
mutex_destroy(&gIdMapperLock);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user