Browse Source

HADOOP-11403. Avoid using sys_errlist on Solaris, which lacks support for it (Malcolm Kavalsky via Colin P. McCabe)
(cherry picked from commit e36ef3b4022a8527cdfa937c4ffc9d46e71cfe28)

Colin Patrick Mccabe 10 năm trước cách đây
mục cha
commit
e8d154baea

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

@@ -438,6 +438,9 @@ Release 2.7.0 - UNRELEASED
     HADOOP-9907. Webapp http://hostname:port/metrics link is not working.
     (aajisaka)
 
+    HADOOP-11403. Avoid using sys_errlist on Solaris, which lacks support for it
+    (Malcolm Kavalsky via Colin P. McCabe)
+
 Release 2.6.1 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 6 - 0
hadoop-common-project/hadoop-common/src/main/native/src/exception.c

@@ -110,9 +110,15 @@ jthrowable newIOException(JNIEnv* env, const char *fmt, ...)
 
 const char* terror(int errnum)
 {
+
+#if defined(__sun)
+// MT-Safe under Solaris which doesn't support sys_errlist/sys_nerr
+  return strerror(errnum); 
+#else
   if ((errnum < 0) || (errnum >= sys_nerr)) {
     return "unknown error.";
   }
   return sys_errlist[errnum];
+#endif
 }
 

+ 2 - 5
hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c

@@ -19,6 +19,7 @@
 #include "org_apache_hadoop.h"
 #include "org_apache_hadoop_io_nativeio_NativeIO.h"
 #include "org_apache_hadoop_io_nativeio_NativeIO_POSIX.h"
+#include "exception.h"
 
 #ifdef UNIX
 #include <assert.h>
@@ -893,11 +894,7 @@ void throw_ioe(JNIEnv* env, int errnum)
   char message[80];
   jstring jstr_message;
 
-  if ((errnum >= 0) && (errnum < sys_nerr)) {
-    snprintf(message, sizeof(message), "%s", sys_errlist[errnum]);
-  } else {
-    snprintf(message, sizeof(message), "Unknown error %d", errnum);
-  }
+  snprintf(message,sizeof(message),"%s",terror(errnum));
 
   jobject errno_obj = errno_to_enum(env, errnum);
 

+ 2 - 9
hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.c

@@ -21,21 +21,14 @@
 #include <curl/curl.h>
 
 #include "hdfs_http_client.h"
+#include "exception.h"
 
 static pthread_mutex_t curlInitMutex = PTHREAD_MUTEX_INITIALIZER;
 static volatile int curlGlobalInited = 0;
 
 const char *hdfs_strerror(int errnoval)
 {
-    const char *msg = NULL;
-    if (errnoval < 0 || errnoval >= sys_nerr) {
-        msg = "Invalid Error Code";
-    } else if (sys_errlist == NULL) {
-        msg = "Unknown Error";
-    } else {
-        msg = sys_errlist[errnoval];
-    }
-    return msg;
+  return terror(errnoval);
 }
 
 int initResponseBuffer(struct ResponseBuffer **buffer)