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

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


disable_gc_for_dlopen ()
{
  int D.4903;
  int GC_incremental.0;
  int D.4908;
  int GC_dont_gc.1;
  int GC_dont_gc.2;
  extern int GC_collection_in_progress ();

  D.4903 = pthread_mutex_trylock (&GC_allocate_ml);
  if (D.4903 != 0) goto <D.4904>; else goto <D.4905>;
  <D.4904>:
  GC_lock ();
  <D.4905>:
  goto <D.4829>;
  <D.4828>:
  GC_collect_a_little_inner (1000);
  <D.4829>:
  GC_incremental.0 = GC_incremental;
  if (GC_incremental.0 != 0) goto <D.4907>; else goto <D.4830>;
  <D.4907>:
  D.4908 = GC_collection_in_progress ();
  if (D.4908 != 0) goto <D.4828>; else goto <D.4830>;
  <D.4830>:
  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);
}


