diff --git a/src/ipc.cc b/src/ipc.cc index a46030a42..159f6919a 100644 --- a/src/ipc.cc +++ b/src/ipc.cc @@ -39,9 +39,12 @@ ObjHandle MemorySegmentPool::allocate(size_t size) { // the process that will use the address char* MemorySegmentPool::get_address(ObjHandle pointer) { if (pointer.segmentid() >= segments_.size()) { - open_segment(pointer.segmentid()); + for (int i = segments_.size(); i <= pointer.segmentid(); ++i) { + open_segment(i); + } } - return static_cast(segments_[pointer.segmentid()]->get_address_from_handle(pointer.ipcpointer())); + managed_shared_memory* segment = segments_[pointer.segmentid()].get(); + return static_cast(segment->get_address_from_handle(pointer.ipcpointer())); } MemorySegmentPool::~MemorySegmentPool() {