mirror of https://github.com/postgres/postgres
ITAGAKI Takahiro's patch.REL8_3_STABLE
parent
ab051bd293
commit
3ff0018c2e
@ -0,0 +1,89 @@ |
||||
#include <stdlib.h> |
||||
#include "ecpg_config.h" |
||||
|
||||
#ifndef ENABLE_THREAD_SAFETY |
||||
int |
||||
main(void) |
||||
{ |
||||
printf("No threading enabled.\n"); |
||||
return 0; |
||||
} |
||||
#else |
||||
#ifdef WIN32 |
||||
#define WIN32_LEAN_AND_MEAN |
||||
#include <windows.h> |
||||
#include <process.h> |
||||
#else |
||||
#include <pthread.h> |
||||
#endif |
||||
#include <stdio.h> |
||||
|
||||
#define THREADS 16 |
||||
#define REPEATS 50 |
||||
|
||||
exec sql include sqlca; |
||||
exec sql include ../regression; |
||||
|
||||
exec sql whenever sqlerror sqlprint; |
||||
exec sql whenever not found sqlprint; |
||||
|
||||
#ifdef WIN32 |
||||
static unsigned STDCALL fn(void* arg) |
||||
#else |
||||
static void* fn(void* arg) |
||||
#endif |
||||
{ |
||||
int i; |
||||
|
||||
EXEC SQL BEGIN DECLARE SECTION; |
||||
int value; |
||||
char name[100]; |
||||
char **r = NULL; |
||||
EXEC SQL END DECLARE SECTION; |
||||
|
||||
value = (int)arg; |
||||
sprintf(name, "Connection: %d", value); |
||||
|
||||
EXEC SQL CONNECT TO REGRESSDB1 AS :name; |
||||
EXEC SQL SET AUTOCOMMIT TO ON; |
||||
for (i = 1; i <= REPEATS; ++i) |
||||
{ |
||||
EXEC SQL SELECT relname INTO :r FROM pg_class WHERE relname = 'pg_class'; |
||||
free(r); |
||||
r = NULL; |
||||
} |
||||
EXEC SQL DISCONNECT :name; |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int main (int argc, char** argv) |
||||
{ |
||||
int i; |
||||
#ifdef WIN32 |
||||
HANDLE threads[THREADS]; |
||||
#else |
||||
pthread_t threads[THREADS]; |
||||
#endif |
||||
|
||||
#ifdef WIN32 |
||||
for (i = 0; i < THREADS; ++i) |
||||
{ |
||||
unsigned id; |
||||
threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, (void*)i, 0, &id); |
||||
} |
||||
|
||||
WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE); |
||||
for (i = 0; i < THREADS; ++i) |
||||
CloseHandle(threads[i]); |
||||
#else |
||||
for (i = 0; i < THREADS; ++i) |
||||
pthread_create(&threads[i], NULL, fn, (void*)i); |
||||
for (i = 0; i < THREADS; ++i) |
||||
pthread_join(threads[i], NULL); |
||||
#endif |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
Loading…
Reference in new issue