Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lexborisov/Modest.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Zhumarin <azq2@ya.ru>2019-01-09 18:22:52 +0300
committerGitHub <noreply@github.com>2019-01-09 18:22:52 +0300
commit1dedb64439bf740ef2bf6652135eed6d026b9acc (patch)
tree0cd6870bf0e310c8f5430695ca2f28018fc58d86
parentd021b907517d0be30bd709dc9649bc9b54e4b4f4 (diff)
Fix segfaults in ALL_IN_ONE mode
-rw-r--r--source/mycore/thread_queue.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/source/mycore/thread_queue.c b/source/mycore/thread_queue.c
index fe53b94..bca2470 100644
--- a/source/mycore/thread_queue.c
+++ b/source/mycore/thread_queue.c
@@ -352,13 +352,14 @@ mythread_queue_list_entry_t * mythread_queue_list_entry_push(mythread_t** mythre
entry->queue = queue;
for(size_t i = 0; i < list_size; i++) {
- if(mythread_list[i]->type == MyTHREAD_TYPE_BATCH)
- mythread_queue_list_entry_make_batch(mythread_list[i], entry);
- else
- mythread_queue_list_entry_make_stream(mythread_list[i], entry);
-
- if(mythread_list[i])
+ if(mythread_list[i]) {
+ if(mythread_list[i]->type == MyTHREAD_TYPE_BATCH)
+ mythread_queue_list_entry_make_batch(mythread_list[i], entry);
+ else
+ mythread_queue_list_entry_make_stream(mythread_list[i], entry);
+
mythread_suspend(mythread_list[i]);
+ }
}
if(queue_list->first) {
@@ -453,11 +454,11 @@ bool mythread_queue_list_entry_see_for_done(mythread_queue_list_entry_t *entry)
void mythread_queue_list_entry_make_batch(mythread_t* mythread, mythread_queue_list_entry_t* entry)
{
- if(entry == NULL)
+ if(entry == NULL || mythread == NULL)
return;
size_t i = 0;
- for(size_t from = mythread->id_increase; from <= mythread->entries_length; from++) {
+ for(size_t from = mythread->id_increase; from < mythread->entries_length; from++) {
entry->thread_param[from].use = i;
i++;
}
@@ -465,10 +466,10 @@ void mythread_queue_list_entry_make_batch(mythread_t* mythread, mythread_queue_l
void mythread_queue_list_entry_make_stream(mythread_t* mythread, mythread_queue_list_entry_t* entry)
{
- if(entry == NULL)
+ if(entry == NULL || mythread == NULL)
return;
- for(size_t from = mythread->id_increase; from <= mythread->entries_length; from++) {
+ for(size_t from = mythread->id_increase; from < mythread->entries_length; from++) {
entry->thread_param[from].use = 0;
}
}