- thread_call_t call;
- spl_t s;
-
- if (thread_call_initialized)
- panic("thread_call_initialize");
-
- simple_lock_init(&thread_call_lock, ETAP_MISC_TIMER);
+ thread_call_t call;
+ thread_call_group_t group = &thread_call_group0;
+ kern_return_t result;
+ thread_t thread;
+ int i;
+ spl_t s;
+
+ i = sizeof (thread_call_data_t);
+ thread_call_zone = zinit(i, 4096 * i, 16 * i, "thread_call");
+ zone_change(thread_call_zone, Z_CALLERACCT, FALSE);
+ zone_change(thread_call_zone, Z_NOENCRYPT, TRUE);
+
+ lck_attr_setdefault(&thread_call_lck_attr);
+ lck_grp_attr_setdefault(&thread_call_lck_grp_attr);
+ lck_grp_init(&thread_call_queues_lck_grp, "thread_call_queues", &thread_call_lck_grp_attr);
+ lck_grp_init(&thread_call_lck_grp, "thread_call", &thread_call_lck_grp_attr);
+
+#if defined(__i386__) || defined(__x86_64__)
+ lck_mtx_init(&thread_call_lock_data, &thread_call_lck_grp, &thread_call_lck_attr);
+#else
+ lck_spin_init(&thread_call_lock_data, &thread_call_lck_grp, &thread_call_lck_attr);
+#endif
+ queue_init(&group->pending_queue);
+ queue_init(&group->delayed_queue);