InitializeCriticalSection (struct WapiCriticalSection * section)
{
  union mono_mutex_t * D.10613;
  _Bool D.10614;
  long int D.10615;
  long int D.10616;
  int ret;

  D.10613 = &section->mutex;
  ret = mono_mutex_init_recursive (D.10613);
  D.10614 = ret != 0;
  D.10615 = (long int) D.10614;
  D.10616 = __builtin_expect (D.10615, 0);
  if (D.10616 != 0) goto <D.10617>; else goto <D.10618>;
  <D.10617>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "critical-sections.c", 35, "ret == 0");
  <D.10618>:
}


mono_mutex_init_recursive (union mono_mutex_t * mutex)
{
  int D.10619;
  int res;
  union pthread_mutexattr_t attr;

  try
    {
      pthread_mutexattr_init (&attr);
      pthread_mutexattr_settype (&attr, 1);
      res = pthread_mutex_init (mutex, &attr);
      pthread_mutexattr_destroy (&attr);
      D.10619 = res;
      return D.10619;
    }
  finally
    {
      attr = {CLOBBER};
    }
}


InitializeCriticalSectionAndSpinCount (struct WapiCriticalSection * section, guint32 spincount)
{
  gboolean D.10622;

  InitializeCriticalSection (section);
  D.10622 = 1;
  return D.10622;
}


DeleteCriticalSection (struct WapiCriticalSection * section)
{
  union mono_mutex_t * D.10624;
  int * D.10627;
  int D.10628;
  int ret;

  D.10624 = &section->mutex;
  ret = pthread_mutex_destroy (D.10624);
  if (ret != 0) goto <D.10625>; else goto <D.10626>;
  <D.10625>:
  D.10624 = &section->mutex;
  D.10627 = __errno_location ();
  D.10628 = *D.10627;
  monoeg_g_log (0B, 4, "Failed to destroy mutex %p error code %d errno %d", D.10624, ret, D.10628);
  <D.10601>:
  goto <D.10601>;
  <D.10626>:
}


SetCriticalSectionSpinCount (struct WapiCriticalSection * section, guint32 spincount)
{
  guint32 D.10629;

  D.10629 = 0;
  return D.10629;
}


TryEnterCriticalSection (struct WapiCriticalSection * section)
{
  union mono_mutex_t * D.10631;
  gboolean D.10634;
  int ret;

  D.10631 = &section->mutex;
  ret = pthread_mutex_trylock (D.10631);
  if (ret == 0) goto <D.10632>; else goto <D.10633>;
  <D.10632>:
  D.10634 = 1;
  return D.10634;
  <D.10633>:
  D.10634 = 0;
  return D.10634;
}


