mono_once (struct mono_once_t * once, void (*<T5d4>) (void) once_init)
{
  int D.5830;
  long int D.5833;
  long int D.5834;
  union pthread_mutex_t * D.5837;
  _Bool D.5838;
  long int D.5839;
  long int D.5840;
  int D.5849;
  int thr_ret;

  D.5830 = once->complete;
  if (D.5830 == 0) goto <D.5831>; else goto <D.5832>;
  <D.5831>:
  {
    struct __pthread_unwind_buf_t __cancel_buf;
    void (*<Tc6>) (void *) __cancel_routine;
    void * __cancel_arg;
    int __not_first_call;

    try
      {
        __cancel_routine = pthread_mutex_unlock;
        __cancel_arg = &once->mutex;
        __not_first_call = __sigsetjmp (&__cancel_buf.__cancel_jmp_buf, 0);
        D.5833 = (long int) __not_first_call;
        D.5834 = __builtin_expect (D.5833, 0);
        if (D.5834 != 0) goto <D.5835>; else goto <D.5836>;
        <D.5835>:
        __cancel_routine (__cancel_arg);
        __pthread_unwind_next (&__cancel_buf);
        <D.5836>:
        __pthread_register_cancel (&__cancel_buf);
        D.5837 = &once->mutex;
        thr_ret = pthread_mutex_lock (D.5837);
        D.5838 = thr_ret != 0;
        D.5839 = (long int) D.5838;
        D.5840 = __builtin_expect (D.5839, 0);
        if (D.5840 != 0) goto <D.5841>; else goto <D.5842>;
        <D.5841>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-mutex.c", 83, "thr_ret == 0");
        <D.5842>:
        D.5830 = once->complete;
        if (D.5830 == 0) goto <D.5843>; else goto <D.5844>;
        <D.5843>:
        once_init ();
        once->complete = 1;
        <D.5844>:
        D.5837 = &once->mutex;
        thr_ret = pthread_mutex_unlock (D.5837);
        D.5838 = thr_ret != 0;
        D.5839 = (long int) D.5838;
        D.5840 = __builtin_expect (D.5839, 0);
        if (D.5840 != 0) goto <D.5845>; else goto <D.5846>;
        <D.5845>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-mutex.c", 90, "thr_ret == 0");
        <D.5846>:
        __pthread_unregister_cancel (&__cancel_buf);
        if (0 != 0) goto <D.5847>; else goto <D.5848>;
        <D.5847>:
        __cancel_routine (__cancel_arg);
        <D.5848>:
      }
    finally
      {
        __cancel_buf = {CLOBBER};
      }
  }
  <D.5832>:
  D.5849 = 0;
  return D.5849;
}


mono_mutex_init_suspend_safe (union mono_mutex_t * mutex)
{
  int D.5853;

  D.5853 = pthread_mutex_init (mutex, 0B);
  return D.5853;
}


