< prev index next >

src/hotspot/os/aix/attachListener_aix.cpp

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2018 SAP SE. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as

@@ -69,36 +69,33 @@
   static bool _shutdown;
 
   // the file descriptor for the listening socket
   static int _listener;
 
-  static bool _atexit_registered;
-
-  // reads a request from the given connected socket
-  static AixAttachOperation* read_request(int s);
-
- public:
-  enum {
-    ATTACH_PROTOCOL_VER = 1                     // protocol version
-  };
-  enum {
-    ATTACH_ERROR_BADVERSION     = 101           // error codes
-  };
-
   static void set_path(char* path) {
     if (path == NULL) {
-      _path[0] = '\0';
       _has_path = false;
     } else {
       strncpy(_path, path, UNIX_PATH_MAX);
       _path[UNIX_PATH_MAX-1] = '\0';
       _has_path = true;
     }
   }
 
   static void set_listener(int s)               { _listener = s; }
 
+  // reads a request from the given connected socket
+  static AixAttachOperation* read_request(int s);
+
+ public:
+  enum {
+    ATTACH_PROTOCOL_VER = 1                     // protocol version
+  };
+  enum {
+    ATTACH_ERROR_BADVERSION     = 101           // error codes
+  };
+
   // initialize the listener, returns 0 if okay
   static int init();
 
   static char* path()                   { return _path; }
   static bool has_path()                { return _has_path; }

@@ -131,11 +128,10 @@
 
 // statics
 char AixAttachListener::_path[UNIX_PATH_MAX];
 bool AixAttachListener::_has_path;
 int AixAttachListener::_listener = -1;
-bool AixAttachListener::_atexit_registered = false;
 // Shutdown marker to prevent accept blocking during clean-up
 bool AixAttachListener::_shutdown = false;
 
 // Supporting class to help split a buffer into individual components
 class ArgumentIterator : public StackObj {

@@ -179,19 +175,21 @@
 //    would be dead after the first operation completion).
 // 2. close(s) may never return if the listener thread is in socket accept(). Unlinking the file
 //    should be sufficient for cleanup.
 extern "C" {
   static void listener_cleanup() {
-    AixAttachListener::set_shutdown(true);
-    int s = AixAttachListener::listener();
-    if (s != -1) {
-      AixAttachListener::set_listener(-1);
-      ::shutdown(s, 2);
-    }
-    if (AixAttachListener::has_path()) {
-      ::unlink(AixAttachListener::path());
-      AixAttachListener::set_path(NULL);
+    static int cleanup_done;
+    if (!cleanup_done) {
+      cleanup_done = 1;
+      AixAttachListener::set_shutdown(true);
+      int s = AixAttachListener::listener();
+      if (s != -1) {
+        ::shutdown(s, 2);
+      }
+      if (AixAttachListener::has_path()) {
+        ::unlink(AixAttachListener::path());
+      }
     }
   }
 }
 
 // Initialization - create a listener socket and bind it to a file

@@ -200,14 +198,11 @@
   char path[UNIX_PATH_MAX];          // socket file
   char initial_path[UNIX_PATH_MAX];  // socket file during setup
   int listener;                      // listener socket (file descriptor)
 
   // register function to cleanup
-  if (!_atexit_registered) {
-    _atexit_registered = true;
-    ::atexit(listener_cleanup);
-  }
+  ::atexit(listener_cleanup);
 
   int n = snprintf(path, UNIX_PATH_MAX, "%s/.java_pid%d",
                    os::get_temp_directory(), os::current_process_id());
   if (n < (int)UNIX_PATH_MAX) {
     n = snprintf(initial_path, UNIX_PATH_MAX, "%s.tmp", path);

@@ -518,30 +513,10 @@
   thread->check_and_wait_while_suspended();
 
   return ret_code;
 }
 
-bool AttachListener::check_socket_file() {
-  int ret;
-  struct stat64 st;
-  ret = stat64(AixAttachListener::path(), &st);
-  if (ret == -1) { // need to restart attach listener.
-    log_debug(attach)("Socket file %s does not exist - Restart Attach Listener",
-                      AixAttachListener::path());
-
-    listener_cleanup();
-
-    // wait to terminate current attach listener instance...
-    while (AttachListener::transit_state(AL_INITIALIZING,
-                                         AL_NOT_INITIALIZED) != AL_NOT_INITIALIZED) {
-      os::naked_yield();
-    }
-    return is_init_trigger();
-  }
-  return false;
-}
-
 // Attach Listener is started lazily except in the case when
 // +ReduseSignalUsage is used
 bool AttachListener::init_at_startup() {
   if (ReduceSignalUsage) {
     return true;
< prev index next >