9 namespace bi = boost::interprocess;
11 static std::map<std::string,std::unique_ptr<bi::shared_memory_object>>
shm_obj;
12 static std::map<std::string,std::unique_ptr<bi::mapped_region>>
mapped;
15 std::string shared_memory_name;
18 rodsLog(
LOG_ERROR,
"prepareServerSharedMemory: failed to get shared memory name" );
23 bi::shared_memory_object* tmp_s =
new bi::shared_memory_object(
25 shared_memory_name.c_str(),
28 shm_obj[_key] = std::unique_ptr<bi::shared_memory_object>(tmp_s);
31 if ( tmp_s->get_size(
size ) &&
size == 0 ) {
35 bi::mapped_region* tmp_m =
new bi::mapped_region( *tmp_s, bi::read_write );
36 unsigned char *shmBuf = (
unsigned char * ) tmp_m->get_address();
38 std::memset( shmBuf, 0, tmp_m->get_size() );
39 strncpy( (
char*)shmBuf,
"UNINITIALIZED", 15 );
41 mapped[_key] = std::unique_ptr<bi::mapped_region>(tmp_m);
46 catch (
const bi::interprocess_exception &
e ) {
47 rodsLog(
LOG_ERROR,
"prepareServerSharedMemory: failed to prepare shared memory. Exception caught [%s]",
e.what() );
58 std::string shared_memory_name;
61 rodsLog(
LOG_ERROR,
"removeSharedMemory: failed to get shared memory name" );
73 std::string shared_memory_name;
76 rodsLog(
LOG_ERROR,
"prepareNonServerSharedMemory: failed to get shared memory name [%s]", shared_memory_name.c_str() );
81 bi::shared_memory_object* tmp_s =
new bi::shared_memory_object(
83 shared_memory_name.c_str(),
85 shm_obj[_key] = std::unique_ptr<bi::shared_memory_object>(tmp_s);
86 bi::mapped_region* tmp_m =
new bi::mapped_region( *tmp_s, bi::read_only );
87 unsigned char *
buf = (
unsigned char * ) tmp_m->get_address();
88 mapped[_key] = std::unique_ptr<bi::mapped_region>(tmp_m);
91 catch (
const bi::interprocess_exception &
e ) {
92 rodsLog(
LOG_ERROR,
"prepareNonServerSharedMemory: failed to get shared memory object [%s]. Exception caught [%s]", shared_memory_name.c_str(),
e.what() );
100 shared_memory_name =
"irods_re_cache_shared_memory_" + _key +
"_" + shared_memory_name_salt;
102 rodsLog(
LOG_ERROR,
"getSharedMemoryName: failed to retrieve re cache salt from server_properties\n%s",
e.what() );