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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.