- wakeup->wakeup_sema = CreateSemaphore(NULL, 0, 100, NULL);
- if (!wakeup->wakeup_sema) {
- silc_free(wakeup);
+ internal = silc_calloc(1, sizeof(*internal));
+ if (!internal)
+ return NULL;
+
+ schedule->max_tasks = MAXIMUM_WAIT_OBJECTS;
+
+ /* Create hidden window. We need window so that we can use WSAAsyncSelect
+ to set socket events. */
+ silc_snprintf(n, sizeof(n), "SilcSchedule-%p", schedule);
+ internal->wclass.lpfnWndProc = silc_schedule_wnd_proc;
+ internal->wclass.cbWndExtra = sizeof(schedule);
+ internal->wclass.lpszClassName = (CHAR *)strdup(n);
+ RegisterClass(&internal->wclass);
+ internal->window = CreateWindow((CHAR *)internal->wclass.lpszClassName, "",
+ 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL);
+ if (!internal->window) {
+ SILC_LOG_ERROR(("Could not create hidden window for scheduler"));
+ DestroyWindow(internal->window);
+ UnregisterClass((CHAR *)n, NULL);
+ silc_free(internal);