From: wtc@netscape.com (Wan-Teh Chang)
To: linux-ia64@vger.kernel.org
Subject: [Linux-ia64] Two IA-64 Linux bugs
Date: Mon, 05 Jun 2000 05:44:24 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590678205116@msgid-missing> (raw)
[-- Attachment #1: Type: text/plain, Size: 625 bytes --]
System info:
[nspr@tl2 unix]$ uname -a
Linux tl2.compile.sourceforge.net 2.3.99-pre6-000501-18smp
#1 SMP Sat May 6 21:30:48 PDT 2000 ia64 unknown
Bug #1: pthread_cond_wait sometimes returns EINVAL (22).
Run the first attachment (pingpong.c) repeatedly.
Note that this test doesn't call pthread_cond_destroy
so it is impossible that we are waiting on a destroyed
condition variable. This failure is intermittent so you
may need to try many times to reproduce it.
Bug #2: sysconf(_SC_NPROCESSORS_ONLN) returns 0.
It should return the number of processors online.
Run the second attachment (ncpus.c) to reproduce it.
Wan-Teh
[-- Attachment #2: pingpong.c.txt --]
[-- Type: text/plain, Size: 3052 bytes --]
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define LOOP 20000
int toggle = 0; /* either 0 or 1 */
pthread_mutex_t mutex; /* protects 'toggle' */
pthread_cond_t cond; /* for the threads to wait on */
void *ping(void *arg)
{
int i;
int rv;
rv = pthread_mutex_lock(&mutex);
if (rv) {
fprintf(stderr, "pthread_mutex_lock failed: %d\n", rv);
exit(1);
}
for (i = 0; i < LOOP; i++) {
while (toggle == 0) {
rv = pthread_cond_wait(&cond, &mutex);
if (rv) {
fprintf(stderr, "pthread_cond_wait failed: %d\n", rv);
exit(1);
}
}
toggle--;
rv = pthread_cond_signal(&cond);
if (rv) {
fprintf(stderr, "pthread_cond_signal failed: %d\n", rv);
exit(1);
}
}
rv = pthread_mutex_unlock(&mutex);
if (rv) {
fprintf(stderr, "pthread_mutex_unlock failed: %d\n", rv);
exit(1);
}
return NULL;
}
void *pong(void *arg)
{
int i;
int rv;
rv = pthread_mutex_lock(&mutex);
if (rv) {
fprintf(stderr, "pthread_mutex_lock failed: %d\n", rv);
exit(1);
}
for (i = 0; i < LOOP; i++) {
while (toggle == 1) {
rv = pthread_cond_wait(&cond, &mutex);
if (rv) {
fprintf(stderr, "pthread_cond_wait failed: %d\n", rv);
exit(1);
}
}
toggle++;
rv = pthread_cond_signal(&cond);
if (rv) {
fprintf(stderr, "pthread_cond_signal failed: %d\n", rv);
exit(1);
}
}
rv = pthread_mutex_unlock(&mutex);
if (rv) {
fprintf(stderr, "pthread_mutex_unlock failed: %d\n", rv);
exit(1);
}
return NULL;
}
int main()
{
pthread_attr_t attr;
pthread_t t1, t2;
int rv;
rv = pthread_mutex_init(&mutex, NULL);
if (rv) {
fprintf(stderr, "pthread_mutex_init failed: %d\n", rv);
exit(1);
}
rv = pthread_cond_init(&cond, NULL);
if (rv) {
fprintf(stderr, "pthread_cond_init failed: %d\n", rv);
exit(1);
}
rv = pthread_attr_init(&attr);
if (rv) {
fprintf(stderr, "pthread_attr_init failed: %d\n", rv);
exit(1);
}
rv = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
if (rv) {
fprintf(stderr, "pthread_attr_setdetachstate failed: %d\n", rv);
exit(1);
}
rv = pthread_create(&t1, &attr, ping, NULL);
if (rv) {
fprintf(stderr, "pthread_create failed: %d\n", rv);
exit(1);
}
rv = pthread_create(&t2, &attr, pong, NULL);
if (rv) {
fprintf(stderr, "pthread_create failed: %d\n", rv);
exit(1);
}
rv = pthread_join(t1, NULL);
if (rv) {
fprintf(stderr, "pthread_join failed: %d\n", rv);
exit(1);
}
rv = pthread_join(t2, NULL);
if (rv) {
fprintf(stderr, "pthread_join failed: %d\n", rv);
exit(1);
}
return 0;
}
[-- Attachment #3: ncpus.c.txt --]
[-- Type: text/plain, Size: 142 bytes --]
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("# processors online = %d\n", sysconf(_SC_NPROCESSORS_ONLN));
return 0;
}
next reply other threads:[~2000-06-05 5:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2000-06-05 5:44 Wan-Teh Chang [this message]
2000-06-05 20:42 ` [Linux-ia64] Two IA-64 Linux bugs Dan Pop
2000-06-05 20:58 ` Bill Nottingham
2000-06-05 22:10 ` Dan Pop
2000-06-06 17:08 ` Boehm, Hans
2000-06-07 14:57 ` Wan-Teh Chang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-ia64-105590678205116@msgid-missing \
--to=wtc@netscape.com \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox