projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Internal scheduler initialization cannot return NULL anymore.
[silc.git]
/
lib
/
silcutil
/
silcschedule.c
diff --git
a/lib/silcutil/silcschedule.c
b/lib/silcutil/silcschedule.c
index adfacd55ea9eb04ca171ee0e001c151a3ad60124..7ffcc51088be6edb0b1f22cd0d60a4b9d13f10d0 100644
(file)
--- a/
lib/silcutil/silcschedule.c
+++ b/
lib/silcutil/silcschedule.c
@@
-325,8
+325,10
@@
SilcSchedule silc_schedule_init(int max_tasks, void *app_context)
schedule->fd_queue =
silc_hash_table_alloc(0, silc_hash_uint, NULL, NULL, NULL,
silc_schedule_fd_destructor, NULL, TRUE);
schedule->fd_queue =
silc_hash_table_alloc(0, silc_hash_uint, NULL, NULL, NULL,
silc_schedule_fd_destructor, NULL, TRUE);
- if (!schedule->fd_queue)
+ if (!schedule->fd_queue) {
+ silc_free(schedule);
return NULL;
return NULL;
+ }
silc_list_init(schedule->timeout_queue, struct SilcTaskStruct, next);
silc_list_init(schedule->free_tasks, struct SilcTaskStruct, next);
silc_list_init(schedule->timeout_queue, struct SilcTaskStruct, next);
silc_list_init(schedule->free_tasks, struct SilcTaskStruct, next);
@@
-340,6
+342,12
@@
SilcSchedule silc_schedule_init(int max_tasks, void *app_context)
/* Initialize the platform specific scheduler. */
schedule->internal = schedule_ops.init(schedule, app_context);
/* Initialize the platform specific scheduler. */
schedule->internal = schedule_ops.init(schedule, app_context);
+ if (!schedule->internal) {
+ silc_hash_table_free(schedule->fd_queue);
+ silc_mutex_free(schedule->lock);
+ silc_free(schedule);
+ return NULL;
+ }
/* Timeout freelist garbage collection */
silc_schedule_task_add_timeout(schedule, silc_schedule_timeout_gc,
/* Timeout freelist garbage collection */
silc_schedule_task_add_timeout(schedule, silc_schedule_timeout_gc,