Skip to content

Commit 4d480f4

Browse files
authored
Merge pull request #2808 from havardAasen/pthread-retval
Check for correct return value after call to 'pthread_*'
2 parents 6e9b3ef + b64fded commit 4d480f4

File tree

3 files changed

+52
-43
lines changed

3 files changed

+52
-43
lines changed

src/rtapi/uspace_rtai.cc

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,20 @@ struct RtaiApp : RtapiApp {
6161
task->pll_correction_limit = 0;
6262
task->pll_correction = 0;
6363

64+
int ret;
6465
pthread_attr_t attr;
65-
if(pthread_attr_init(&attr) < 0)
66-
return -errno;
67-
if(pthread_attr_setstacksize(&attr, task->stacksize) < 0)
68-
return -errno;
69-
if(pthread_attr_setschedpolicy(&attr, policy) < 0)
70-
return -errno;
71-
if(pthread_attr_setschedparam(&attr, &param) < 0)
72-
return -errno;
73-
if(pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) < 0)
74-
return -errno;
75-
if(pthread_create(&task->thr, &attr, &wrapper, reinterpret_cast<void*>(task)) < 0)
76-
return -errno;
66+
if((ret = pthread_attr_init(&attr)) != 0)
67+
return -ret;
68+
if((ret = pthread_attr_setstacksize(&attr, task->stacksize)) != 0)
69+
return -ret;
70+
if((ret = pthread_attr_setschedpolicy(&attr, policy)) != 0)
71+
return -ret;
72+
if((ret = pthread_attr_setschedparam(&attr, &param)) != 0)
73+
return -ret;
74+
if((ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED)) != 0)
75+
return -ret;
76+
if((ret = pthread_create(&task->thr, &attr, &wrapper, reinterpret_cast<void*>(task))) != 0)
77+
return -ret;
7778

7879
return 0;
7980
}

src/rtapi/uspace_rtapi_app.cc

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -453,14 +453,15 @@ static pthread_t main_thread{};
453453

454454
static int master(int fd, vector<string> args) {
455455
main_thread = pthread_self();
456-
if(pthread_create(&queue_thread, nullptr, &queue_function, nullptr) < 0) {
456+
int result;
457+
if((result = pthread_create(&queue_thread, nullptr, &queue_function, nullptr)) != 0) {
458+
errno = result;
457459
perror("pthread_create (queue function)");
458460
return -1;
459461
}
460462
do_load_cmd("hal_lib", vector<string>());
461463
instance_count = 0;
462464
App(); // force rtapi_app to be created
463-
int result=0;
464465
if(args.size()) {
465466
result = handle_command(args);
466467
if(result != 0) goto out;
@@ -1028,16 +1029,17 @@ int Posix::task_start(int task_id, unsigned long int period_nsec)
10281029
int nprocs = sysconf( _SC_NPROCESSORS_ONLN );
10291030

10301031
pthread_attr_t attr;
1031-
if(pthread_attr_init(&attr) < 0)
1032-
return -errno;
1033-
if(pthread_attr_setstacksize(&attr, task->stacksize) < 0)
1034-
return -errno;
1035-
if(pthread_attr_setschedpolicy(&attr, policy) < 0)
1036-
return -errno;
1037-
if(pthread_attr_setschedparam(&attr, &param) < 0)
1038-
return -errno;
1039-
if(pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) < 0)
1040-
return -errno;
1032+
int ret;
1033+
if((ret = pthread_attr_init(&attr)) != 0)
1034+
return -ret;
1035+
if((ret = pthread_attr_setstacksize(&attr, task->stacksize)) != 0)
1036+
return -ret;
1037+
if((ret = pthread_attr_setschedpolicy(&attr, policy)) != 0)
1038+
return -ret;
1039+
if((ret = pthread_attr_setschedparam(&attr, &param)) != 0)
1040+
return -ret;
1041+
if((ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED)) != 0)
1042+
return -ret;
10411043
if(nprocs > 1) {
10421044
const static int rt_cpu_number = find_rt_cpu_number();
10431045
if(rt_cpu_number != -1) {
@@ -1048,12 +1050,12 @@ int Posix::task_start(int task_id, unsigned long int period_nsec)
10481050
#endif
10491051
CPU_ZERO(&cpuset);
10501052
CPU_SET(rt_cpu_number, &cpuset);
1051-
if(pthread_attr_setaffinity_np(&attr, sizeof(cpuset), &cpuset) < 0)
1052-
return -errno;
1053+
if((ret = pthread_attr_setaffinity_np(&attr, sizeof(cpuset), &cpuset)) != 0)
1054+
return -ret;
10531055
}
10541056
}
1055-
if(pthread_create(&task->thr, &attr, &wrapper, reinterpret_cast<void*>(task)) < 0)
1056-
return -errno;
1057+
if((ret = pthread_create(&task->thr, &attr, &wrapper, reinterpret_cast<void*>(task))) != 0)
1058+
return -ret;
10571059

10581060
return 0;
10591061
}
@@ -1215,7 +1217,12 @@ int rtapi_task_delete(int id) {
12151217

12161218
int rtapi_task_start(int task_id, unsigned long period_nsec)
12171219
{
1218-
return App().task_start(task_id, period_nsec);
1220+
int ret = App().task_start(task_id, period_nsec);
1221+
if(ret != 0) {
1222+
errno = -ret;
1223+
perror("rtapi_task_start()");
1224+
}
1225+
return ret;
12191226
}
12201227

12211228
int rtapi_task_pause(int task_id)

src/rtapi/uspace_xenomai.cc

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,23 @@ struct XenomaiApp : RtapiApp {
5555
int nprocs = sysconf( _SC_NPROCESSORS_ONLN );
5656
CPU_SET(nprocs-1, &cpuset); // assumes processor numbers are contiguous
5757

58+
int ret;
5859
pthread_attr_t attr;
59-
if(pthread_attr_init(&attr) < 0)
60-
return -errno;
61-
if(pthread_attr_setstacksize(&attr, task->stacksize) < 0)
62-
return -errno;
63-
if(pthread_attr_setschedpolicy(&attr, policy) < 0)
64-
return -errno;
65-
if(pthread_attr_setschedparam(&attr, &param) < 0)
66-
return -errno;
67-
if(pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) < 0)
68-
return -errno;
60+
if((ret = pthread_attr_init(&attr)) != 0)
61+
return -ret;
62+
if((ret = pthread_attr_setstacksize(&attr, task->stacksize)) != 0)
63+
return -ret;
64+
if((ret = pthread_attr_setschedpolicy(&attr, policy)) != 0)
65+
return -ret;
66+
if((ret = pthread_attr_setschedparam(&attr, &param)) != 0)
67+
return -ret;
68+
if((ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED)) != 0)
69+
return -ret;
6970
if(nprocs > 1)
70-
if(pthread_attr_setaffinity_np(&attr, sizeof(cpuset), &cpuset) < 0)
71-
return -errno;
72-
if(pthread_create(&task->thr, &attr, &wrapper, reinterpret_cast<void*>(task)) < 0)
73-
return -errno;
71+
if((ret = pthread_attr_setaffinity_np(&attr, sizeof(cpuset), &cpuset)) != 0)
72+
return -ret;
73+
if((ret = pthread_create(&task->thr, &attr, &wrapper, reinterpret_cast<void*>(task))) != 0)
74+
return -ret;
7475

7576
return 0;
7677
}

0 commit comments

Comments
 (0)