Pārlūkot izejas kodu

HADOOP-10404. Some accesses to DomainSocketWatcher#closed are not protected by the lock (cmccabe)
(cherry picked from commit 8099de259fb91a29674bf17cb1382c038b707a90)

Colin Patrick Mccabe 10 gadi atpakaļ
vecāks
revīzija
c97134d054

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -15,6 +15,9 @@ Release 2.7.0 - UNRELEASED
 
   BUG FIXES
 
+    HADOOP-10404. Some accesses to DomainSocketWatcher#closed are not protected
+    by the lock (cmccabe)
+
 Release 2.6.0 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 6 - 0
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/unix/DomainSocketWatcher.java

@@ -101,6 +101,7 @@ public final class DomainSocketWatcher implements Closeable {
    */
   private class NotificationHandler implements Handler {
     public boolean handle(DomainSocket sock) {
+      lock.lock();
       try {
         if (LOG.isTraceEnabled()) {
           LOG.trace(this + ": NotificationHandler: doing a read on " +
@@ -124,6 +125,8 @@ public final class DomainSocketWatcher implements Closeable {
         }
         closed = true;
         return true;
+      } finally {
+        lock.unlock();
       }
     }
   }
@@ -346,12 +349,15 @@ public final class DomainSocketWatcher implements Closeable {
    * Wake up the DomainSocketWatcher thread.
    */
   private void kick() {
+    lock.lock();
     try {
       notificationSockets[0].getOutputStream().write(0);
     } catch (IOException e) {
       if (!closed) {
         LOG.error(this + ": error writing to notificationSockets[0]", e);
       }
+    } finally {
+      lock.unlock();
     }
   }