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_getspecific(pthread_key_t key)
Definition: pthread-win32.c:29
void pthread_setspecific(pthread_key_t key, void *val)
Definition: pthread-win32.c:24
#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 
114 if (sqlca.sqlcode < 0) sqlprint();
115 #line 28 "descriptor.pgc"
116 
117  ECPGdeallocate_desc(__LINE__, "mydesc");
118 #line 29 "descriptor.pgc"
119 
120 if (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:73
#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.