summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/qpthreads.c81
-rw-r--r--lib/qpthreads.h3
-rw-r--r--lib/stream.h23
3 files changed, 57 insertions, 50 deletions
diff --git a/lib/qpthreads.c b/lib/qpthreads.c
index ebaf6f19..4288b9ff 100644
--- a/lib/qpthreads.c
+++ b/lib/qpthreads.c
@@ -568,9 +568,8 @@ qpt_thread_create(void* (*start)(void*), void* arg, qpt_thread_attr_t* attr)
{
qstring qs ;
- qs = qpt_thread_attr_form(&thread_attr, " ") ;
-
- fputs(qs_string(qs), stderr) ;
+ qs = qpt_thread_attr_form(&thread_attr) ;
+ zlog_info("Thread created: %s", qs_string(qs)) ;
qs_free(qs) ;
}
@@ -1392,7 +1391,7 @@ qpt_data_delete(qpt_data data)
* NB: it is the caller's responsibility to dispose of the qstring
*/
extern qstring
-qpt_thread_attr_form(qpt_thread_attr_t* attr, const char *prefix)
+qpt_thread_attr_form(qpt_thread_attr_t* attr)
{
int err, i ;
qstring qs ;
@@ -1402,131 +1401,117 @@ qpt_thread_attr_form(qpt_thread_attr_t* attr, const char *prefix)
qs = qs_new(500) ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sDetach state ", prefix) ;
err = pthread_attr_getdetachstate(attr, &i);
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, "[getdetachstate *error* %s]", errtoa(err, 0).str) ;
else
{
switch(i)
{
case PTHREAD_CREATE_DETACHED:
- qs_printf_a(qs, "= %s\n", "PTHREAD_CREATE_DETACHED") ;
+ qs_printf_a(qs, "Detached") ;
break ;
case PTHREAD_CREATE_JOINABLE:
- qs_printf_a(qs, "= %s\n", "PTHREAD_CREATE_JOINABLE") ;
+ qs_printf_a(qs, "Joinable") ;
break ;
default:
- qs_printf_a(qs, "= *UNKNOWN* %d\n", i) ;
+ qs_printf_a(qs, "[getdetachstate *unknown* %d]", i) ;
break ;
} ;
} ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sScope ", prefix) ;
- err = pthread_attr_getscope(attr, &i);
+ err = pthread_attr_getinheritsched(attr, &i);
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, " [getinheritsched *error* %s]", errtoa(err, 0).str) ;
else
{
switch(i)
{
- case PTHREAD_SCOPE_SYSTEM:
- qs_printf_a(qs, "= %s\n", "PTHREAD_SCOPE_SYSTEM") ;
+ case PTHREAD_INHERIT_SCHED:
+ qs_printf_a(qs, " Inherit-Sched") ;
break ;
- case PTHREAD_SCOPE_PROCESS:
- qs_printf_a(qs, "= %s\n", "PTHREAD_SCOPE_PROCESS") ;
+ case PTHREAD_EXPLICIT_SCHED:
+ qs_printf_a(qs, " Explicit-Sched") ;
break ;
default:
- qs_printf_a(qs, "= *UNKNOWN* %d\n", i) ;
+ qs_printf_a(qs, " [getinheritsched *unknown* %d]", i) ;
break ;
} ;
} ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sInherit scheduler ", prefix) ;
- err = pthread_attr_getinheritsched(attr, &i);
+ err = pthread_attr_getscope(attr, &i);
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, " [getscope *error* %s]", errtoa(err, 0).str) ;
else
{
switch(i)
{
- case PTHREAD_INHERIT_SCHED:
- qs_printf_a(qs, "= %s\n", "PTHREAD_INHERIT_SCHED") ;
+ case PTHREAD_SCOPE_SYSTEM:
+ qs_printf_a(qs, " System-Scope") ;
break ;
- case PTHREAD_EXPLICIT_SCHED:
- qs_printf_a(qs, "= %s\n", "PTHREAD_EXPLICIT_SCHED") ;
+ case PTHREAD_SCOPE_PROCESS:
+ qs_printf_a(qs, " Process-Scope") ;
break ;
default:
- qs_printf_a(qs, "= *UNKNOWN* %d\n", i) ;
+ qs_printf_a(qs, " [getscope *unknown* %d]", i) ;
break ;
} ;
} ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sScheduling policy ", prefix) ;
err = pthread_attr_getschedpolicy(attr, &i);
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, " [getschedpolicy *error* %s]", errtoa(err, 0).str) ;
else
{
switch(i)
{
case SCHED_OTHER:
- qs_printf_a(qs, "= %s\n", "SCHED_OTHER") ;
+ qs_printf_a(qs, " SCHED_OTHER") ;
break ;
case SCHED_FIFO:
- qs_printf_a(qs, "= %s\n", "SCHED_FIFO") ;
+ qs_printf_a(qs, " SCHED_FIFO") ;
break ;
case SCHED_RR:
- qs_printf_a(qs, "= %s\n", "SCHED_RR") ;
+ qs_printf_a(qs, " SCHED_RR") ;
break ;
#ifdef SCHED_SPORADIC
case SCHED_SPORADIC:
- qs_printf_a(qs, "= %s\n", "SCHED_SPORADIC") ;
+ qs_printf_a(qs, " SCHED_SPORADIC") ;
break ;
#endif
default:
- qs_printf_a(qs, "= *UNKNOWN* %d\n", i) ;
+ qs_printf_a(qs, " SCHED_UNKNOWN=%d", i) ;
break ;
} ;
} ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sScheduling priority ", prefix) ;
err = pthread_attr_getschedparam(attr, sp);
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, " [getschedparam *error* %s]", errtoa(err, 0).str) ;
else
- qs_printf_a(qs, "= %d\n", sp->sched_priority) ;
+ qs_printf_a(qs, " Priority=%d", sp->sched_priority) ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sGuard size ", prefix) ;
err = pthread_attr_getguardsize(attr, &v);
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, " [getguardsize *error* %s]", errtoa(err, 0).str) ;
else
- qs_printf_a(qs, "= %u\n", (uint)v) ;
+ qs_printf_a(qs, " Guard-Size=%u", (uint)v) ;
- /* 12345678901234567890 */
- qs_printf_a(qs, "%sStack address/size ", prefix) ;
err = pthread_attr_getstack(attr, &stkaddr, &v) ;
if (err != 0)
- qs_printf_a(qs, " *error* %s\n", errtoa(err, 0).str) ;
+ qs_printf_a(qs, " [getstack *error* %s]", errtoa(err, 0).str) ;
else
- qs_printf_a(qs, "= %p/%u\n", stkaddr, (uint)v) ;
+ qs_printf_a(qs, " Stack=%p/%u", stkaddr, (uint)v) ;
return qs ;
} ;
diff --git a/lib/qpthreads.h b/lib/qpthreads.h
index 363fbead..78c39a6e 100644
--- a/lib/qpthreads.h
+++ b/lib/qpthreads.h
@@ -194,8 +194,7 @@ qpt_thread_join(qpt_thread_t thread_id) ;
extern clockid_t qpt_get_cpu_clock(qpt_thread_t thread_id) ;
extern qtime_t qpt_cpu_time(clockid_t clock_id) ;
-extern qstring qpt_thread_attr_form(qpt_thread_attr_t* attr,
- const char *prefix) ;
+extern qstring qpt_thread_attr_form(qpt_thread_attr_t* attr) ;
/*==============================================================================
* Signal Handling.
diff --git a/lib/stream.h b/lib/stream.h
index b4d981b1..a7906573 100644
--- a/lib/stream.h
+++ b/lib/stream.h
@@ -177,6 +177,8 @@ Inline bool stream_has_overflowed(struct stream* s) ;
Inline void stream_clear_overrun(struct stream* s) ;
Inline void stream_clear_overflow(struct stream* s) ;
+Inline bool stream_has_written_beyond(struct stream* s, size_t limit) ;
+
Inline void stream_set_getp(struct stream *, size_t);
Inline void stream_set_endp(struct stream *, size_t);
Inline void stream_set_startp(struct stream* s, size_t) ;
@@ -503,6 +505,27 @@ stream_clear_overflow(struct stream* s)
}
/*------------------------------------------------------------------------------
+ * Test if the endp is beyond the given limit
+ *
+ * A stream may be set up to be longer than some actual limit, so that the
+ * extent of overflowing beyond that limit can be measured. This test can
+ * then be used to see if the endp is *currently* within the given limit.
+ *
+ * Returns: true <=> endp is *beyond* the given limit.
+ *
+ * NB: the limit MUST be less than the size -- for if not, this is *always*
+ * going to return false, because the s->endp is *always* <= s->size !
+ */
+Inline bool
+stream_has_written_beyond(struct stream* s, size_t limit)
+{
+ qassert_stream(s) ;
+ qassert(limit < s->size) ;
+
+ return (s->endp > limit) ;
+} ;
+
+/*------------------------------------------------------------------------------
* Set s->getp to given value.
*
* If value > s->endp will force to s->endp and set s->overrun.