+
+ clock_absolutetime_interval_to_deadline(
+ tvtoabstime(&atv), &sel->abstime);
+ }
+ else
+ sel->abstime = 0;
+
+ sel->nfcount = 0;
+ if (error = selcount(p, sel->ibits, sel->obits, uap->nd, &count, &nfcount)) {
+ goto continuation;
+ }
+
+ sel->nfcount = nfcount;
+ sel->count = count;
+ size = SIZEOF_WAITQUEUE_SUB + (count * SIZEOF_WAITQUEUE_LINK);
+ if (sel->allocsize) {
+ if (uth->uu_wqsub == 0)
+ panic("select: wql memory smashed");
+ /* needed for the select now */
+ if (size > sel->allocsize) {
+ kfree(uth->uu_wqsub, sel->allocsize);
+ sel->allocsize = size;
+ uth->uu_wqsub = (wait_queue_sub_t)kalloc(sel->allocsize);
+ if (uth->uu_wqsub == (wait_queue_sub_t)NULL)
+ panic("failed to allocate memory for waitqueue\n");
+ sel->wql = (char *)uth->uu_wqsub + SIZEOF_WAITQUEUE_SUB;
+ }
+ } else {
+ sel->count = count;
+ sel->allocsize = size;
+ uth->uu_wqsub = (wait_queue_sub_t)kalloc(sel->allocsize);
+ if (uth->uu_wqsub == (wait_queue_sub_t)NULL)
+ panic("failed to allocate memory for waitqueue\n");
+ sel->wql = (char *)uth->uu_wqsub + SIZEOF_WAITQUEUE_SUB;
+ }
+ bzero(uth->uu_wqsub, size);
+ wait_queue_sub_init(uth->uu_wqsub, (SYNC_POLICY_FIFO | SYNC_POLICY_PREPOST));
+