[ https://issues.apache.org/jira/browse/HADOOP-15372?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Miklos Szegedi 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 also see an unrelated 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 > Priority: Minor > > 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