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

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


disable_gc_for_dlopen ()
{
  int D.4553;
  int GC_incremental.0;
  int D.4558;
  int GC_dont_gc.1;
  int GC_dont_gc.2;
  extern int GC_collection_in_progress ();

  D.4553 = pthread_mutex_trylock (&GC_allocate_ml);
  if (D.4553 != 0) goto <D.4554>; else goto <D.4555>;
  <D.4554>:
  GC_lock ();
  <D.4555>:
  goto <D.4479>;
  <D.4478>:
  GC_collect_a_little_inner (1000);
  <D.4479>:
  GC_incremental.0 = GC_incremental;
  if (GC_incremental.0 != 0) goto <D.4557>; else goto <D.4480>;
  <D.4557>:
  D.4558 = GC_collection_in_progress ();
  if (D.4558 != 0) goto <D.4478>; else goto <D.4480>;
  <D.4480>:
  GC_dont_gc.1 = GC_dont_gc;
  GC_dont_gc.2 = GC_dont_gc.1 + 1;
  GC_dont_gc = GC_dont_gc.2;
  pthread_mutex_unlock (&GC_allocate_ml);
}


