- ACQUIRE_SPIN_LOCK(&stp->sync_todo);
- if (stp->todos) {
- bd = stp->todos;
- if (stp->todos == stp->todos_last) {
- stp->todos_last = NULL;
+ return NULL;
+}
+
+#if defined(THREADED_RTS)
+bdescr *
+steal_todo_block (nat g)
+{
+ nat n;
+ bdescr *bd;
+
+ // look for work to steal
+ for (n = 0; n < n_gc_threads; n++) {
+ if (n == gct->thread_index) continue;
+ bd = stealWSDeque(gc_threads[n]->gens[g].todo_q);
+ if (bd) {
+ return bd;