+ p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+ if (unlikely(DQ_IS_FCT_BIT(p))) {
+ //printf("%lu fct bit %p\n", i-1, p);
+ DQ_CLEAR_FCT_BIT(p);
+ queue->last_fct_out = p;
+ p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+ } else if (unlikely(p == DQ_FCT_MARK)) {
+ //printf("%lu fct mark %p\n", i-1, p);
+ p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+ queue->last_fct_out = p;
+ p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+ }// else
+ //printf("%lu data %p\n", i-1, p);
+ fct = queue->last_fct_out;
+ //printf("tid %lu %lu last_fct %p data %p\n", pthread_self(), i-1, fct, p);
+ fct(p);