Bläddra i källkod

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 år sedan
förälder
incheckning
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)