InitializeCriticalSection (struct WapiCriticalSection * section)
{
  union mono_mutex_t * D.8527;
  _Bool D.8528;
  long int D.8529;
  long int D.8530;
  int ret;

  D.8527 = &section->mutex;
  ret = mono_mutex_init_recursive (D.8527);
  D.8528 = ret != 0;
  D.8529 = (long int) D.8528;
  D.8530 = __builtin_expect (D.8529, 0);
  if (D.8530 != 0) goto <D.8531>; else goto <D.8532>;
  <D.8531>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "critical-sections.c", 35, "ret == 0");
  <D.8532>:
}


mono_mutex_init_recursive (union mono_mutex_t * mutex)
{
  int D.8533;
  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.8533 = res;
      return D.8533;
    }
  finally
    {
      attr = {CLOBBER};
    }
}


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

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


DeleteCriticalSection (struct WapiCriticalSection * section)
{
  union mono_mutex_t * D.8538;
  int * D.8541;
  int D.8542;
  int ret;

  D.8538 = &section->mutex;
  ret = pthread_mutex_destroy (D.8538);
  if (ret != 0) goto <D.8539>; else goto <D.8540>;
  <D.8539>:
  D.8538 = &section->mutex;
  D.8541 = __errno_location ();
  D.8542 = *D.8541;
  monoeg_g_log (0B, 4, "Failed to destroy mutex %p error code %d errno %d", D.8538, ret, D.8542);
  <D.8517>:
  goto <D.8517>;
  <D.8540>:
}


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

  D.8543 = 0;
  return D.8543;
}


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

  D.8545 = &section->mutex;
  ret = pthread_mutex_trylock (D.8545);
  if (ret == 0) goto <D.8546>; else goto <D.8547>;
  <D.8546>:
  D.8548 = 1;
  return D.8548;
  <D.8547>:
  D.8548 = 0;
  return D.8548;
}


