000000a0 b table.6366
000001e0 b table.6400
+ OK. Prim_binary_fasload only hacks the local heap, but it
+ uses gcloop, which uses non-pthread-local state. Use of this
+ primitive is now locked up. Prim_band_load uses smp_gc_start
+ to get exclusive access to the heap, gcloop, etc. for the
+ duration of a gc-wait.
+
fixnum.o:
floenv.o:
#include "option.h"
#include "fasl.h"
+#ifdef ENABLE_SMP
+static pthread_mutex_t mutex = MUTEX_INITIALIZER;
+# ifdef ENABLE_DEBUGGING_TOOLS
+static bool locked_p = false;
+# endif
+#endif
+
+static void
+unlock (void *null)
+{
+ UNLOCK();
+}
+
static fasl_header_t fasl_header;
static fasl_header_t * fh;
static SCHEME_OBJECT * new_heap_start;
canonicalize_primitive_context ();
transaction_begin ();
+ transaction_record_action (tat_always, &unlock, NULL);
+ LOCK();
init_fasl_file ((STRING_ARG (1)), false, (&handle));
if ((FASLHDR_CONSTANT_SIZE (fh)) > 0)