[ https://issues.apache.org/jira/browse/HADOOP-15372?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Akira Ajisaka updated HADOOP-15372: ----------------------------------- Description: YARN-5641 introduced some cleanup code in the Shell class. It has a race condition. {{Shell.runCommand()}} can be called while/after {{Shell.getAllShells()}} returned all the shells to be cleaned up. This new thread can avoid the clean up, so that the process held by it can be leaked causing leaked localized files/etc. I see another issue as well. {{Shell.runCommand()}} has a finally block with a {{process.destroy();}} to clean up. However, the try catch block does not cover all instructions after the process is started, so for example we can exit the thread and leak the process, if {{timeOutTimer.schedule(timeoutTimerTask, timeOutInterval);}} causes an exception. was: YARN-5641 introduced some cleanup code in the Shell class. It has a race condition. {{Shell. runCommand()}} can be called while/after {{Shell.getAllShells()}} returned all the shells to be cleaned up. This new thread can avoid the clean up, so that the process held by it can be leaked causing leaked localized files/etc. I see another issue as well. {{Shell.runCommand()}} has a finally block with a {{ process.destroy();}} to clean up. However, the try catch block does not cover all instructions after the process is started, so for example we can exit the thread and leak the process, if {{ timeOutTimer.schedule(timeoutTimerTask, timeOutInterval);}} causes an exception. > Race conditions and possible leaks in the Shell class > ----------------------------------------------------- > > Key: HADOOP-15372 > URL: https://issues.apache.org/jira/browse/HADOOP-15372 > Project: Hadoop Common > Issue Type: Bug > Affects Versions: 2.10.0, 3.2.0 > Reporter: Miklos Szegedi > Assignee: Eric Badger > Priority: Minor > Attachments: HADOOP-15372.001.patch > > > YARN-5641 introduced some cleanup code in the Shell class. It has a race > condition. {{Shell.runCommand()}} can be called while/after > {{Shell.getAllShells()}} returned all the shells to be cleaned up. This new > thread can avoid the clean up, so that the process held by it can be leaked > causing leaked localized files/etc. > I see another issue as well. {{Shell.runCommand()}} has a finally block with > a {{process.destroy();}} to clean up. However, the try catch block does not > cover all instructions after the process is started, so for example we can > exit the thread and leak the process, if > {{timeOutTimer.schedule(timeoutTimerTask, timeOutInterval);}} causes an > exception. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org