Linux 3.5 compat, eops->encode_fh() takes inodes
[zfs.git] / lib / libuutil / uu_misc.c
index 3d5b40c..67f757c 100644 (file)
@@ -34,7 +34,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/debug.h>
-#include <thread.h>
 #include <unistd.h>
 #include <ctype.h>
 
@@ -68,11 +67,12 @@ static va_list              uu_panic_args;
 static pthread_t       uu_panic_thread;
 
 static uint32_t                _uu_main_error;
+static __thread int    _uu_main_thread = 0;
 
 void
 uu_set_error(uint_t code)
 {
-       if (thr_main() != 0) {
+       if (_uu_main_thread) {
                _uu_main_error = code;
                return;
        }
@@ -101,7 +101,7 @@ uu_set_error(uint_t code)
 uint32_t
 uu_error(void)
 {
-       if (thr_main() != 0)
+       if (_uu_main_thread)
                return (_uu_main_error);
 
        if (uu_error_key_setup < 0)     /* can't happen? */
@@ -206,14 +206,6 @@ uu_panic(const char *format, ...)
                        (void) pause();
 }
 
-int
-assfail(const char *astring, const char *file, int line)
-{
-       __assert(astring, file, line);
-       /*NOTREACHED*/
-       return (0);
-}
-
 static void
 uu_lockup(void)
 {
@@ -245,10 +237,17 @@ uu_release_child(void)
        uu_release();
 }
 
+#ifdef __GNUC__
+static void
+uu_init(void) __attribute__((constructor));
+#else
 #pragma init(uu_init)
+#endif
+
 static void
 uu_init(void)
 {
+       _uu_main_thread = 1;
        (void) pthread_atfork(uu_lockup, uu_release, uu_release_child);
 }