void FileConnList::postRestart() { /* It is possible to have two different connection-ids for a pre-existing * CTTY in two or more different process trees. In this case, only one of the * several process trees would be able to acquire a lock on the underlying * fd. The send-receive fd logic fails in this case due to different * connection-ids. Therefore, we let every process do a postRestart to * reopen the CTTY. * * TODO: A better fix would be to have a unique connection-id for each * pre-existing CTTY that is then used by all process trees. It can be * implemented by using the SharedData area. */ for (iterator i = begin(); i != end(); ++i) { Connection* con = i->second; if (!con->hasLock() && con->conType() == Connection::PTY && con->isPreExistingCTTY()) { PtyConnection *pcon = (PtyConnection*) con; pcon->postRestart(); } } /* Try to map the file as is, if it already exists on the disk. */ for (size_t i = 0; i < unlinkedShmAreas.size(); i++) { if (jalib::Filesystem::FileExists(unlinkedShmAreas[i].name)) { // TODO(kapil): Verify the file contents. JWARNING(false) (unlinkedShmAreas[i].name) .Text("File was unlinked at ckpt but is currently present on disk; " "remove it and try again."); restoreShmArea(unlinkedShmAreas[i]); } else { missingUnlinkedShmFiles.push_back(unlinkedShmAreas[i]); } } ConnectionList::postRestart(); }
void dmtcp::FileConnList::postRestart() { /* It is possible to have two different connection-ids for a pre-existing * CTTY in two or more different process trees. In this case, only one of the * several process trees would be able to acquire a lock on the underlying * fd. The send-receive fd logic fails in this case due to different * connection-ids. Therefore, we let every process do a postRestart to * reopen the CTTY. * * TODO: A better fix would be to have a unique connection-id for each * pre-existing CTTY that is then used by all process trees. It can be * implemented by using the SharedData area. */ for (iterator i = begin(); i != end(); ++i) { Connection* con = i->second; if (!con->hasLock() && con->conType() == Connection::PTY && con->isPreExistingCTTY()) { PtyConnection *pcon = (PtyConnection*) con; pcon->postRestart(); } } ConnectionList::postRestart(); }