diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ipcpd/normal/sdu_sched.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/ipcpd/normal/sdu_sched.c b/src/ipcpd/normal/sdu_sched.c index 0399f4df..d4826ce5 100644 --- a/src/ipcpd/normal/sdu_sched.c +++ b/src/ipcpd/normal/sdu_sched.c @@ -100,12 +100,12 @@ struct sdu_sched * sdu_sched_create(next_sdu_fn_t callback) int i; int j; + assert(callback); + sdu_sched = malloc(sizeof(*sdu_sched)); if (sdu_sched == NULL) goto fail_malloc; - assert(callback); - sdu_sched->callback = callback; for (i = 0; i < QOS_CUBE_MAX; ++i) { @@ -135,7 +135,9 @@ struct sdu_sched * sdu_sched_create(next_sdu_fn_t callback) pthread_cancel(sdu_sched->readers[j]); for (j = 0; j < i; ++j) pthread_join(sdu_sched->readers[j], NULL); - goto fail_pthr; + for (j = i; j < QOS_CUBE_MAX * IPCP_SCHED_THR_MUL; ++j) + free(infos[i]); + goto fail_infos; } } @@ -152,6 +154,7 @@ struct sdu_sched * sdu_sched_create(next_sdu_fn_t callback) par.sched_priority = min + (qos_prio[i % QOS_CUBE_MAX] * (max - min) / 99); + if (pthread_setschedparam(sdu_sched->readers[i], pol, &par)) goto fail_sched; } @@ -163,9 +166,6 @@ struct sdu_sched * sdu_sched_create(next_sdu_fn_t callback) pthread_cancel(sdu_sched->readers[j]); for (j = 0; j < QOS_CUBE_MAX * IPCP_SCHED_THR_MUL; ++j) pthread_join(sdu_sched->readers[j], NULL); - fail_pthr: - for (j = 0; j < QOS_CUBE_MAX * IPCP_SCHED_THR_MUL; ++j) - free(infos[j]); fail_infos: for (j = 0; j < QOS_CUBE_MAX; ++j) fset_destroy(sdu_sched->set[j]); @@ -181,7 +181,7 @@ void sdu_sched_destroy(struct sdu_sched * sdu_sched) assert(sdu_sched); - for (i = 0; i < QOS_CUBE_MAX; ++i) { + for (i = 0; i < QOS_CUBE_MAX * IPCP_SCHED_THR_MUL; ++i) { pthread_cancel(sdu_sched->readers[i]); pthread_join(sdu_sched->readers[i], NULL); } |