+int Mono_Posix_SIGRTMIN (void)
+{
+#ifdef SIGRTMIN
+ return SIGRTMIN;
+#else /* def SIGRTMIN */
+ return -1;
+#endif /* ndef SIGRTMIN */
+}
+
+int Mono_Posix_SIGRTMAX (void)
+{
+#ifdef SIGRTMAX
+ return SIGRTMAX;
+#else /* def SIGRTMAX */
+ return -1;
+#endif /* ndef SIGRTMAX */
+}
+
+int Mono_Posix_FromRealTimeSignum (int offset, int *r)
+{
+ if (NULL == r) {
+ errno = EINVAL;
+ return -1;
+ }
+ *r = 0;
+#if defined (SIGRTMIN) && defined (SIGRTMAX)
+ if ((offset < 0) || (SIGRTMIN > SIGRTMAX - offset)) {
+ errno = EINVAL;
+ return -1;
+ }
+ *r = SIGRTMIN+offset;
+ return 0;
+#else /* defined (SIGRTMIN) && defined (SIGRTMAX) */
+# ifdef ENOSYS
+ errno = ENOSYS;
+# endif /* ENOSYS */
+ return -1;
+#endif /* defined (SIGRTMIN) && defined (SIGRTMAX) */
+}
+
+#ifndef HOST_WIN32
+
+#ifndef WAPI_NO_ATOMIC_ASM
+ #define mph_int_get(p) InterlockedExchangeAdd ((p), 0)
+ #define mph_int_inc(p) InterlockedIncrement ((p))
+ #define mph_int_dec_test(p) (InterlockedDecrement ((p)) == 0)
+ #define mph_int_set(p,o,n) InterlockedExchange ((p), (n))
+#elif GLIB_CHECK_VERSION(2,4,0)
+ #define mph_int_get(p) g_atomic_int_get ((p))
+ #define mph_int_inc(p) do {g_atomic_int_inc ((p));} while (0)
+ #define mph_int_dec_test(p) g_atomic_int_dec_and_test ((p))
+ #define mph_int_set(p,o,n) do { \
+ while (!g_atomic_int_compare_and_exchange ((p), (o), (n))) {} \
+ } while (0)
+#else
+ #define mph_int_get(p) (*(p))
+ #define mph_int_inc(p) do { (*(p))++; } while (0)
+ #define mph_int_dec_test(p) (--(*(p)) == 0)
+ #define mph_int_set(p,o,n) do { *(p) = n; } while (0)
+#endif