codeowners update
[mono.git] / libgc / misc.c
index 79c8178e73e42cb187f7a4f0eb776e6e81ecd621..480759c57b9a750d505e053ca2f29a99a5c2a770 100644 (file)
                        /* Used only for assertions, and to prevent      */
                        /* recursive reentry in the system call wrapper. */
 #              endif 
-#            else
+#            elif defined(SN_TARGET_PS3)
+                 #include <pthread.h>
+                 pthread_mutex_t GC_allocate_ml;
+#             else
                  --> declare allocator lock here
 #            endif
 #         endif
@@ -470,17 +473,32 @@ size_t GC_get_total_bytes GC_PROTO(())
 
 int GC_get_suspend_signal GC_PROTO(())
 {
-#ifdef SIG_SUSPEND
+#if defined(SIG_SUSPEND) && defined(GC_PTHREADS) && !defined(GC_MACOSX_THREADS) && !defined(GC_OPENBSD_THREADS)
        return SIG_SUSPEND;
 #else
        return -1;
 #endif
 }
 
+int GC_get_thr_restart_signal GC_PROTO(())
+{
+#if defined(SIG_THR_RESTART) && defined(GC_PTHREADS) && !defined(GC_MACOSX_THREADS) && !defined(GC_OPENBSD_THREADS)
+       return SIG_THR_RESTART;
+#else
+       return -1;
+#endif
+}
+
+
+
 GC_bool GC_is_initialized = FALSE;
 
 void GC_init()
 {
+#if defined(SN_TARGET_PS3)
+       pthread_mutexattr_t mattr;
+#endif
+
     DCL_LOCK_STATE;
     
     DISABLE_SIGNALS();
@@ -498,6 +516,13 @@ void GC_init()
          InitializeCriticalSection (&GC_allocate_ml);
     }
 #endif /* MSWIN32 */
+#if defined(SN_TARGET_PS3)
+       pthread_mutexattr_init (&mattr);
+               
+       pthread_mutex_init (&GC_allocate_ml, &mattr);
+       pthread_mutexattr_destroy (&mattr);
+               
+#endif
 
     LOCK();
     GC_init_inner();
@@ -670,7 +695,7 @@ void GC_init_inner()
 #   if defined(SEARCH_FOR_DATA_START)
        GC_init_linux_data_start();
 #   endif
-#   if (defined(NETBSD) || defined(OPENBSD)) && defined(__ELF__)
+#   if defined(NETBSD) && defined(__ELF__)
        GC_init_netbsd_elf();
 #   endif
 #   if defined(GC_PTHREADS) || defined(GC_SOLARIS_THREADS) \
@@ -989,7 +1014,11 @@ long a, b, c, d, e, f;
     buf[1024] = 0x15;
     (void) sprintf(buf, format, a, b, c, d, e, f);
     if (buf[1024] != 0x15) ABORT("GC_printf clobbered stack");
+#ifdef NACL
+    WRITE(GC_stdout, buf, strlen(buf));
+#else
     if (WRITE(GC_stdout, buf, strlen(buf)) < 0) ABORT("write to stdout failed");
+#endif
 }
 
 void GC_err_printf(format, a, b, c, d, e, f)
@@ -1001,13 +1030,21 @@ long a, b, c, d, e, f;
     buf[1024] = 0x15;
     (void) sprintf(buf, format, a, b, c, d, e, f);
     if (buf[1024] != 0x15) ABORT("GC_err_printf clobbered stack");
+#ifdef NACL
+    WRITE(GC_stderr, buf, strlen(buf));
+#else
     if (WRITE(GC_stderr, buf, strlen(buf)) < 0) ABORT("write to stderr failed");
+#endif
 }
 
 void GC_err_puts(s)
 GC_CONST char *s;
 {
+#ifdef NACL
+    WRITE(GC_stderr, s, strlen(s));
+#else
     if (WRITE(GC_stderr, s, strlen(s)) < 0) ABORT("write to stderr failed");
+#endif
 }
 
 #if defined(LINUX) && !defined(SMALL_CONFIG)