view test/torturethread.c @ 1438:1f4f09641645

Date: Sun, 26 Feb 2006 11:25:09 +0900 From: Hayashi Naoyuki Subject: Re: [SDL] CVS stable again, please update SDL ports Some problems are caused on Tru64 UNIX. If applying SDL12-osf1.path, these problems are fixed. 1. configure-script say "recursive mutexes... no" and "pthread semaphores... no". checking for pthreads... yes checking for recursive mutexes... no checking for pthread semaphores... no This is because it compiled without pthread_cflags and pthread_lib when checking recursive mutexes and pthread semaphores. 2. Compiling src/audio/mme/SDL_mmeaudio.c fails. cc: Severe: ./src/audio/mme/SDL_mmeaudio.c, line 25: Cannot find file <mme_api.h> specified in #include directive. (noinclfilef) #include <mme_api.h> -^ This is because BUILD_CFLAGS is wrong. 3. Compiling src/cdrom/osf/SDL_syscdrom.c fails. cc: Warning: ./src/cdrom/osf/SDL_syscdrom.c, line 176: Too few actual parameters in the invocation of the macro "SDL_stack_alloc". (toofewactuals) cdpath = SDL_stack_alloc(len); ------------------------------------^ cc: Error: ./src/cdrom/osf/SDL_syscdrom.c, line 176: Invalid expression. (badexpr) cdpath = SDL_stack_alloc(len); -----------------^ SDL_stack_alloc is defined in include/SDL_stdinc.h. #define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*count) 4. Linking fails if running configure with --enable-x11-shared=yes. /usr/ccs/bin/ld: Warning: Unresolved: p_XData32 5. Compiling src/video/x11/SDL_x11dyn.c fails if running configure with --enable-x11-shared=no. cc: Error: ./src/video/x11/SDL_x11sym.h, line 149: In this statement, "_SmtBufferOverflow" is not declared. (undeclared) SDL_X11_SYM(1,void,_SmtBufferOverflow,(Display *dpy,register smtDisplayPtr)) ^ cc: Error: ./src/video/x11/SDL_x11sym.h, line 150: In this statement, "_SmtBufferOverflow" is not declared. (undeclared) SDL_X11_SYM(1,void,_SmtBufferOverflow,(Display *dpy,register smtDisplayPtr)) ^ cc: Error: ./src/video/x11/SDL_x11sym.h, line 150: In this statement, "_SmtIpError" is not declared. (undeclared) SDL_X11_SYM(1,void,_SmtIpError,(Display *dpy,register smtDisplayPtr, int)) ^
author Sam Lantinga <slouken@libsdl.org>
date Sun, 26 Feb 2006 04:54:01 +0000
parents d93862a3d821
children 1dd8bf30a109
line wrap: on
line source


/* Simple test of the SDL threading code */

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>

#include "SDL.h"
#include "SDL_thread.h"

#define NUMTHREADS 10

static char volatile time_for_threads_to_die[NUMTHREADS];

/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void quit(int rc)
{
	SDL_Quit();
	exit(rc);
}

int SubThreadFunc(void *data) {
	while(! *(int volatile *)data) {
		; /*SDL_Delay(10);*/  /* do nothing */
	}
	return 0;
}

int ThreadFunc(void *data) {
	SDL_Thread *sub_threads[NUMTHREADS];
	int flags[NUMTHREADS];
	int i;
	int tid = (int ) data;

	fprintf(stderr, "Creating Thread %d\n", tid);

	for(i = 0; i < NUMTHREADS; i++) {
		flags[i] = 0;
		sub_threads[i] = SDL_CreateThread(SubThreadFunc, &flags[i]);
	}

	printf("Thread '%d' waiting for signal\n", tid);
	while(time_for_threads_to_die[tid] != 1) {
		; /* do nothing */
	}

	printf("Thread '%d' sending signals to subthreads\n", tid);
	for(i = 0; i <  NUMTHREADS; i++) {
		flags[i] = 1;
		SDL_WaitThread(sub_threads[i], NULL);
	}

	printf("Thread '%d' exiting!\n", tid);

	return 0;
}

int main(int argc, char *argv[])
{
	SDL_Thread *threads[NUMTHREADS];
	int i;

	/* Load the SDL library */
	if ( SDL_Init(0) < 0 ) {
		fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
		return(1);
	}

	signal(SIGSEGV, SIG_DFL);
	for(i = 0; i < NUMTHREADS; i++) {
		time_for_threads_to_die[i] = 0;
		threads[i] = SDL_CreateThread(ThreadFunc, (void *) i);
	
		if ( threads[i] == NULL ) {
			fprintf(stderr,
			"Couldn't create thread: %s\n", SDL_GetError());
			quit(1);
		}
	}

	for(i = 0; i < NUMTHREADS; i++) {
		time_for_threads_to_die[i] = 1;
	}

	for(i = NUMTHREADS-1; i >= 0; --i) {
		SDL_WaitThread(threads[i], NULL);
	}
	SDL_Quit();
	return(0);
}