GC_dlopen (const char * path, int mode)
{
  void * D.4983;
  void * result;

  disable_gc_for_dlopen ();
  result = dlopen (path, mode);
  GC_enable ();
  D.4983 = result;
  return D.4983;
}


disable_gc_for_dlopen ()
{
  int D.4985;
  int GC_incremental.0;
  int D.4990;
  int GC_dont_gc.1;
  int D.4992;

  D.4985 = pthread_mutex_trylock (&GC_allocate_ml);
  if (D.4985 != 0) goto <D.4986>; else goto <D.4987>;
  <D.4986>:
  GC_lock ();
  <D.4987>:
  {
    extern int GC_collection_in_progress ();

    goto <D.4911>;
    <D.4910>:
    GC_collect_a_little_inner (1000);
    <D.4911>:
    GC_incremental.0 = GC_incremental;
    if (GC_incremental.0 != 0) goto <D.4989>; else goto <D.4912>;
    <D.4989>:
    D.4990 = GC_collection_in_progress ();
    if (D.4990 != 0) goto <D.4910>; else goto <D.4912>;
    <D.4912>:
  }
  GC_dont_gc.1 = GC_dont_gc;
  D.4992 = GC_dont_gc.1 + 1;
  GC_dont_gc = D.4992;
  pthread_mutex_unlock (&GC_allocate_ml);
}


