pthread
Joel Sherrill
joel.sherrill at OARcorp.com
Thu Mar 7 16:29:07 UTC 2002
Pattara Kiatisevi wrote:
>
> The default &_POSIX_Threads_Default_attributes looks correct:
>
> (gdb) print *attr
> $10 = {is_initialized = 1, stackaddr = 0x0, stacksize = 8192,
> contentionscope = 0, inheritsched = 1,
> schedpolicy = 1, schedparam = {sched_priority = 2, ss_low_priority = 0,
> ss_replenish_period = {
> tv_sec = 0, tv_nsec = 0}, ss_initial_budget = {tv_sec = 0, tv_nsec =
> 0}},
>
> But then from this code in pthread_create.c:
>
> ---------------------------------------------------------------------
> switch ( the_attr->inheritsched ) {
> case PTHREAD_INHERIT_SCHED:
> api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
> schedpolicy = api->schedpolicy;
> schedparam = api->schedparam;
> break;
>
> case PTHREAD_EXPLICIT_SCHED:
> schedpolicy = the_attr->schedpolicy;
> schedparam = the_attr->schedparam;
> break;
>
> ---------------------------------------------------------------------
> As the_attr->inheritsched = 1 --> api is pointed to
> _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
>
> (gdb) print *(pthread_attr_t *) _Thread_Executing->API_Extensions[
> THREAD_API_POSIX ]
This cast is incorrect. It is of type (POSIX_API_Control *) and
is allocated in the routine _POSIX_Threads_Create_extension in pthread.c
so this dump of the structure is not right. The first field is
Attributes so the first part is OK.
I think you broke before the structure is copied in. that doesn't
happen until line 204.
> $13 = {is_initialized = 1024, stackaddr = 0x4005cf98, stacksize = 0,
> contentionscope = 1077805608,
> inheritsched = 1077802744, schedpolicy = 1074041268, schedparam =
> {sched_priority = 1074029292,
> ss_low_priority = 8192, ss_replenish_period = {tv_sec = 1077802760,
> tv_nsec = 1074108524},
> ss_initial_budget = {tv_sec = 260, tv_nsec = 13}},
> cputime_clock_allowed = 196,
> detachstate = 1074035620}
>
> This above one looks not so good. Do you think that my code overwrites it
> somehow? Hmm, I will try to have my code purified and see..
I
> Thanks,
> Pattara
>
> On Thu, 7 Mar 2002, Joel Sherrill wrote:
>
> >
> >
> > Pattara Kiatisevi wrote:
> > >
> > > Thank you for the answer.
> > >
> > > Seems that the "default" priority is set something weird?
> >
> > Look at the default structure before you run very far. I
> > suspect you are overwriting it.
> >
> > I have (quickly) doublechecked the pre-initialized structure
> > for default attributes in pthread.c and don't see where
> > it doesn't match field for field and is initialized
> > correctly. So that leads me to believe it is corrupted
> > by execution.
> >
> > > -----------------------------------------------------------------
> > > 285 task_ret = pthread_create(&audioPlay, NULL, (void *)
> > > playAudioTask, (void *) &taskparameter);(gdb) s
> > > pthread_create (thread=0x403f7d70, attr=0x0, start_routine=0x4000187c
> > > <playAudioTask>, arg=0x403f7d68)
> > > at ../../../../../../../c/src/exec/posix/src/pthreadcreate.c:41
> > > 41 the_attr = (attr) ? attr : &_POSIX_Threads_Default_attributes;
> > > (gdb) n
> > > 43 if ( !the_attr->is_initialized )
> > > (gdb) print the_attr
> > > $1 = (pthread_attr_t *) 0x4005dc80
> > > (gdb) n
> > > 51 if ( the_attr->stackaddr && !_Stack_Is_enough(
> > > the_attr->stacksize ) )
> > > (gdb) n
> > > 70 api = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
> > > (gdb) n
> > > 72 schedparam = api->schedparam;
> > > (gdb) n
> > > 71 schedpolicy = api->schedpolicy;
> > > (gdb) n
> > > 72 schedparam = api->schedparam;
> > > (gdb)
> > > 73 break;
> > > (gdb)
> > > 89 if ( the_attr->contentionscope != PTHREAD_SCOPE_PROCESS )
> > > (gdb)
> > > 20 return (boolean) (priority >= 1 && priority <= 254);
> > > (gdb)
> > > 96 if ( !_POSIX_Priority_Is_valid( schedparam.sched_priority ) )
> > > (gdb)
> > > 235 return EINVAL;
> > > (gdb) print schedparam
> > > $2 = {sched_priority = 1073764644, ss_low_priority = 8217,
> > > ss_replenish_period = {tv_sec = 1077899424,
> > > tv_nsec = 1074035684}, ss_initial_budget = {tv_sec = 0, tv_nsec = 0}}
> > > (gdb) print schedparam.sched_priority
> > > $3 = 1073764644
> > > (gdb) n
> > > 247 }
> > > (gdb)
> > > Init (ignored=0) at player.c:286
> > > 286 if (task_ret) {
> > > (gdb) print task_ret
> > > $4 = 22
> > >
> > > Pattara
> > > --
> > > Please avoid sending me Word or PowerPoint attachments.
> > > See http://www.fsf.org/philosophy/no-word-attachments.html
> > > ----------------------------------------------------------------------
> > > Ott Pattara Kiatisevi T L W G
> > > M.Sc. INFOTECH Student, Stuttgart, Germany http://linux.thai.net/
> > > ----------------------------------------------------------------------
> > >
> > > On Thu, 7 Mar 2002, Joel Sherrill wrote:
> > >
> > > >
> > > >
> > > > Pattara Kiatisevi wrote:
> > > > >
> > > > > Hi,
> > > > >
> > > > > I'm writing a pthread program. In the header I have:
> > > > >
> > > > > #define CONFIGURE_MAXIMUM_POSIX_THREADS 5
> > > > > #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 5
> > > > > #define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 5
> > > > >
> > > > > Then in Init() I have sth. like:n
> > > > >
> > > > > {
> > > > > int task_ret;
> > > > > task_ret = pthread_create(&audioPlay, NULL, (void *) playAudioTask,
> > > > > (void *) &taskparameter);
> > > > > if (task_ret) {
> > > > > perror("pthread_create: playAudioTask");
> > > > > exit(EXIT_FAILURE);
> > > > > }
> > > > > }
> > > > >
> > > > > The program exited with task_ret = 22. Anybody has the idea what this "22"
> > > > > means? Do I have to set any #define more in order to have pthread function
> > > > > worked?
> > > >
> > > >
> > > > You probably want to use strerror or perror on the exit paths. But
> > > > see /opt/rtems/CPU-rtems/include/sys/errno.h for the mapping. This
> > > > is EINVAL. Unfortunately, that is a catch all error in in POSIX.
> > > > The only real error it doesn't cover is not configuring enough
> > > > pthreads. I hate to suggest this but you would be better off
> > > > tracing into the call or at least reading the pthreadcreate.c
> > > > source and see if something rings a bell. Here is the URL
> > > > for the man page which lists the conditions for EINVAL:
> > > >
> > > > http://www.oarcorp.com/rtemsdoc-4.5.1-pre3/rtemsdoc/html/posix_users/posix_users00344.html
> > > >
> > > > > Thank you very much,
> > > >
> > > > POSIX makes figuring out what is wrong with a call tough.
> > > > I don't see anything obvious myself.
> > > >
> > > > > Pattara
> > > > >
> > > > > --
> > > > > Please avoid sending me Word or PowerPoint attachments.
> > > > > See http://www.fsf.org/philosophy/no-word-attachments.html
> > > > > ----------------------------------------------------------------------
> > > > > Ott Pattara Kiatisevi T L W G
> > > > > M.Sc. INFOTECH Student, Stuttgart, Germany http://linux.thai.net/
> > > > > ----------------------------------------------------------------------
> > > >
> > > > --
> > > > Joel Sherrill, Ph.D. Director of Research & Development
> > > > joel at OARcorp.com On-Line Applications Research
> > > > Ask me about RTEMS: a free RTOS Huntsville AL 35805
> > > > Support Available (256) 722-9985
> > > >
> > > >
> >
> > --
> > Joel Sherrill, Ph.D. Director of Research & Development
> > joel at OARcorp.com On-Line Applications Research
> > Ask me about RTEMS: a free RTOS Huntsville AL 35805
> > Support Available (256) 722-9985
> >
> >
--
Joel Sherrill, Ph.D. Director of Research & Development
joel at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list