PostgreSQL Source Code git master
thread-descriptor.c File Reference
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
#include <pthread.h>
#include <stdio.h>
Include dependency graph for thread-descriptor.c:

Go to the source code of this file.

Data Structures

struct  sqlca_t
 

Macros

#define ECPGdebug(X, Y)   ECPGdebug((X)+100,(Y))
 
#define THREADS   16
 
#define REPEATS   50000
 
#define POSTGRES_SQLCA_H
 
#define PGDLLIMPORT
 
#define SQLERRMC_LEN   150
 
#define sqlca   (*ECPGget_sqlca())
 

Functions

struct sqlca_tECPGget_sqlca (void)
 
static void * fn (void *arg)
 
int main ()
 

Macro Definition Documentation

◆ ECPGdebug

#define ECPGdebug (   X,
 
)    ECPGdebug((X)+100,(Y))

Definition at line 7 of file thread-descriptor.c.

◆ PGDLLIMPORT

#define PGDLLIMPORT

Definition at line 32 of file thread-descriptor.c.

◆ POSTGRES_SQLCA_H

#define POSTGRES_SQLCA_H

Definition at line 26 of file thread-descriptor.c.

◆ REPEATS

#define REPEATS   50000

Definition at line 21 of file thread-descriptor.c.

◆ sqlca

#define sqlca   (*ECPGget_sqlca())

Definition at line 83 of file thread-descriptor.c.

◆ SQLERRMC_LEN

#define SQLERRMC_LEN   150

Definition at line 36 of file thread-descriptor.c.

◆ THREADS

#define THREADS   16

Definition at line 20 of file thread-descriptor.c.

Function Documentation

◆ ECPGget_sqlca()

struct sqlca_t * ECPGget_sqlca ( void  )

Definition at line 108 of file misc.c.

109{
110 struct sqlca_t *sqlca;
111
112 pthread_once(&sqlca_key_once, ecpg_sqlca_key_init);
113
115 if (sqlca == NULL)
116 {
117 sqlca = malloc(sizeof(struct sqlca_t));
118 if (sqlca == NULL)
119 return NULL;
122 }
123 return sqlca;
124}
#define malloc(a)
Definition: header.h:50
static pthread_key_t sqlca_key
Definition: misc.c:58
void ecpg_init_sqlca(struct sqlca_t *sqlca)
Definition: misc.c:67
static void ecpg_sqlca_key_init(void)
Definition: misc.c:102
static pthread_once_t sqlca_key_once
Definition: misc.c:59
void pthread_setspecific(pthread_key_t key, void *val)
Definition: pthread-win32.c:24
void * pthread_getspecific(pthread_key_t key)
Definition: pthread-win32.c:29
#define sqlca
Definition: sqlca.h:59
Definition: sqlca.h:20

◆ fn()

static void * fn ( void *  arg)
static

Definition at line 104 of file thread-descriptor.c.

106{
107 int i;
108
109 for (i = 1; i <= REPEATS; ++i)
110 {
111 ECPGallocate_desc(__LINE__, "mydesc");
112#line 28 "descriptor.pgc"
113
114if (sqlca.sqlcode < 0) sqlprint();
115#line 28 "descriptor.pgc"
116
117 ECPGdeallocate_desc(__LINE__, "mydesc");
118#line 29 "descriptor.pgc"
119
120if (sqlca.sqlcode < 0) sqlprint();
121#line 29 "descriptor.pgc"
122
123 }
124
125 return 0;
126}
bool ECPGdeallocate_desc(int line, const char *name)
Definition: descriptor.c:748
bool ECPGallocate_desc(int line, const char *name)
Definition: descriptor.c:792
void sqlprint(void)
Definition: error.c:334
int i
Definition: isn.c:72
#define REPEATS
#define sqlca

References ECPGallocate_desc(), ECPGdeallocate_desc(), i, REPEATS, sqlca, and sqlprint().

Referenced by main().

◆ main()

int main ( void  )

Definition at line 128 of file thread-descriptor.c.

129{
130 int i;
131#ifdef WIN32
132 HANDLE threads[THREADS];
133#else
134 pthread_t threads[THREADS];
135#endif
136
137#ifdef WIN32
138 for (i = 0; i < THREADS; ++i)
139 {
140 unsigned id;
141 threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, NULL, 0, &id);
142 }
143
144 WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE);
145 for (i = 0; i < THREADS; ++i)
146 CloseHandle(threads[i]);
147#else
148 for (i = 0; i < THREADS; ++i)
149 pthread_create(&threads[i], NULL, fn, NULL);
150 for (i = 0; i < THREADS; ++i)
151 pthread_join(threads[i], NULL);
152#endif
153
154 return 0;
155}
static void * fn(void *arg)
#define THREADS

References fn(), i, and THREADS.