@ -109,9 +110,9 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
@@ -109,9 +110,9 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
unsignedlongstructsize;
char*p=(char*)argv;
pthread_ttask;
pthread_ttask={};
pthread_attr_tattr;
structsched_paramparam;
structsched_paramparam={};
// Calculate argc
while(p!=(char*)0){
@ -130,6 +131,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
@@ -130,6 +131,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
// not safe to pass stack data to the thread creation
taskdata=(pthdata_t*)malloc(structsize+len);
memset(taskdata,0,structsize+len);
offset=((unsignedlong)taskdata)+structsize;
taskdata->entry=entry;
@ -195,6 +197,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
@@ -195,6 +197,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
}
}
pthread_mutex_lock(&task_mutex);
for(i=0;i<PX4_MAX_TASKS;++i){
if(taskmap[i].isused==false){
taskmap[i].pid=task;
@ -203,6 +206,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
@@ -203,6 +206,7 @@ px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int
break;
}
}
pthread_mutex_unlock(&task_mutex);
if(i>=PX4_MAX_TASKS){
return-ENOSPC;
@ -224,9 +228,11 @@ int px4_task_delete(px4_task_t id)
@@ -224,9 +228,11 @@ int px4_task_delete(px4_task_t id)
return-EINVAL;
}
pthread_mutex_lock(&task_mutex);
// If current thread then exit, otherwise cancel
if(pthread_self()==pid){
taskmap[id].isused=false;
pthread_mutex_unlock(&task_mutex);
pthread_exit(0);
}else{
@ -234,6 +240,7 @@ int px4_task_delete(px4_task_t id)
@@ -234,6 +240,7 @@ int px4_task_delete(px4_task_t id)