void libshm_init(const char* manager_exec_path); | |
// Superclass to run a constructor before at::RefcountedMapAllocator | |
class THManagedMapAllocatorInit { | |
protected: | |
THManagedMapAllocatorInit(const char* manager_handle, const char* filename); | |
std::string manager_handle_; | |
}; | |
// Like a at::RefcountedMapAllocator, but it also makes use of an external | |
// shared memory manager process to ensure that shared memory regions actually | |
// get freed in the end (even if processes lose the memory). | |
class THManagedMapAllocator : private THManagedMapAllocatorInit, | |
public at::RefcountedMapAllocator { | |
public: | |
THManagedMapAllocator( | |
const char* manager_handle, | |
const char* filename, | |
int flags, | |
size_t size); | |
void close() override; | |
~THManagedMapAllocator() override { | |
close(); | |
} | |
static at::DataPtr makeDataPtr( | |
const char* manager_handle, | |
const char* filename, | |
int flags, | |
size_t size); | |
static THManagedMapAllocator* fromDataPtr(const at::DataPtr&); | |
const char* manager_handle() const { | |
return manager_handle_.c_str(); | |
} | |
}; | |