Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
a970a8cb
Commit
a970a8cb
authored
Aug 23, 2005
by
Bruce Momjian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Back out incorrect commit.
parent
eef7e30c
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
68 additions
and
229 deletions
+68
-229
configure
configure
+0
-15
configure.in
configure.in
+1
-14
doc/src/sgml/release.sgml
doc/src/sgml/release.sgml
+2
-2
src/interfaces/libpq/Makefile
src/interfaces/libpq/Makefile
+9
-2
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-connect.c
+1
-5
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/fe-exec.c
+16
-7
src/interfaces/libpq/fe-misc.c
src/interfaces/libpq/fe-misc.c
+2
-6
src/interfaces/libpq/fe-print.c
src/interfaces/libpq/fe-print.c
+9
-8
src/interfaces/libpq/fe-secure.c
src/interfaces/libpq/fe-secure.c
+13
-18
src/interfaces/libpq/libpq-int.h
src/interfaces/libpq/libpq-int.h
+2
-6
src/interfaces/libpq/pthread-win32.c
src/interfaces/libpq/pthread-win32.c
+2
-2
src/tools/thread/README
src/tools/thread/README
+0
-33
src/tools/thread/thread_test.c
src/tools/thread/thread_test.c
+11
-111
No files found.
configure
View file @
a970a8cb
...
...
@@ -20908,8 +20908,6 @@ fi
if
test
x
"
$template
"
!=
x
"win32"
then
echo
"
$as_me
:
$LINENO
: checking for POSIX signal interface"
>
&5
echo
$ECHO_N
"checking for POSIX signal interface...
$ECHO_C
"
>
&6
if
test
"
${
pgac_cv_func_posix_signals
+set
}
"
=
set
;
then
...
...
@@ -20988,7 +20986,6 @@ echo "$as_me: error:
"
>
&2
;
}
{
(
exit
1
)
;
exit
1
;
}
;
}
fi
fi
if
test
$ac_cv_func_fseeko
=
yes
;
then
# Check whether --enable-largefile or --disable-largefile was given.
...
...
@@ -22435,8 +22432,6 @@ done
# defined. Cross compiling throws a warning.
#
if
test
"
$enable_thread_safety_force
"
=
yes
;
then
if
test
x
"
$template
"
!=
x
"win32"
then
{
echo
"
$as_me
:
$LINENO
: WARNING:
*** Skipping thread test program. --enable-thread-safety-force was used.
*** Run the program in src/tools/thread on the your machine and add
...
...
@@ -22449,13 +22444,7 @@ echo "$as_me: WARNING:
proper locking function calls to your applications to guarantee thread
safety.
"
>
&2
;
}
else
{
echo
"
$as_me
:
$LINENO
: WARNING: *** Skipping thread test on Win32"
>
&5
echo
"
$as_me
: WARNING: *** Skipping thread test on Win32"
>
&2
;
}
fi
elif
test
"
$enable_thread_safety
"
=
yes
;
then
if
test
x
"
$template
"
!=
x
"win32"
then
echo
"
$as_me
:
$LINENO
: checking thread safety of required library functions"
>
&5
echo
$ECHO_N
"checking thread safety of required library functions...
$ECHO_C
"
>
&6
...
...
@@ -22528,10 +22517,6 @@ rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftes
fi
CFLAGS
=
"
$_CFLAGS
"
LIBS
=
"
$_LIBS
"
else
{
echo
"
$as_me
:
$LINENO
: WARNING: *** Skipping thread test on Win32"
>
&5
echo
"
$as_me
: WARNING: *** Skipping thread test on Win32"
>
&2
;
}
fi
fi
# prepare build tree if outside source tree
...
...
configure.in
View file @
a970a8cb
dnl Process this file with autoconf to produce a configure script.
dnl $PostgreSQL: pgsql/configure.in,v 1.42
1 2005/08/23 20:45:0
4 momjian Exp $
dnl $PostgreSQL: pgsql/configure.in,v 1.42
2 2005/08/23 20:48:4
4 momjian Exp $
dnl
dnl Developers, please strive to achieve this order:
dnl
...
...
@@ -1172,8 +1172,6 @@ AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [],
AC_CHECK_TYPES(sig_atomic_t, [], [], [#include <signal.h>])
if test x"$template" != x"win32"
then
PGAC_FUNC_POSIX_SIGNALS
if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; then
AC_MSG_ERROR([
...
...
@@ -1181,7 +1179,6 @@ if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; t
*** operating system.
])
fi
fi
if test $ac_cv_func_fseeko = yes; then
AC_SYS_LARGEFILE
...
...
@@ -1244,20 +1241,13 @@ AC_CHECK_PROGS(SGMLSPL, sgmlspl)
# defined. Cross compiling throws a warning.
#
if test "$enable_thread_safety_force" = yes; then
if test x"$template" != x"win32"
then
AC_MSG_WARN([
*** Skipping thread test program. --enable-thread-safety-force was used.
*** Run the program in src/tools/thread on the your machine and add
proper locking function calls to your applications to guarantee thread
safety.
])
else
AC_MSG_WARN([*** Skipping thread test on Win32])
fi
elif test "$enable_thread_safety" = yes; then
if test x"$template" != x"win32"
then
AC_MSG_CHECKING([thread safety of required library functions])
_CFLAGS="$CFLAGS"
...
...
@@ -1283,9 +1273,6 @@ AC_TRY_RUN([#include "$srcdir/src/tools/thread/thread_test.c"],
])])
CFLAGS="$_CFLAGS"
LIBS="$_LIBS"
else
AC_MSG_WARN([*** Skipping thread test on Win32])
fi
fi
# prepare build tree if outside source tree
...
...
doc/src/sgml/release.sgml
View file @
a970a8cb
<!--
$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.34
7 2005/08/23 20:45:0
5 momjian Exp $
$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.34
8 2005/08/23 20:48:4
5 momjian Exp $
-->
<appendix id="release">
...
...
@@ -1078,7 +1078,7 @@ $PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.347 2005/08/23 20:45:05 momjian
</itemizedlist>
</para>
<para>
<function>
pg_
complete_relation_size()</> includes indexes and TOAST
<function>complete_relation_size()</> includes indexes and TOAST
tables.
</para>
</listitem>
...
...
src/interfaces/libpq/Makefile
View file @
a970a8cb
...
...
@@ -5,7 +5,7 @@
# Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
# $PostgreSQL: pgsql/src/interfaces/libpq/Makefile,v 1.13
5 2005/08/23 20:45:0
6 momjian Exp $
# $PostgreSQL: pgsql/src/interfaces/libpq/Makefile,v 1.13
6 2005/08/23 20:48:4
6 momjian Exp $
#
#-------------------------------------------------------------------------
...
...
@@ -43,7 +43,9 @@ libpqrc.o: libpq.rc
windres
-i
libpq.rc
-o
libpqrc.o
ifeq
($(enable_thread_safety), yes)
# This doesn't work yet because configure test fails. 2004-06-19
OBJS
+=
pthread-win32.o
PTHREAD_H_WIN32
=
pthread.h
endif
endif
...
...
@@ -57,7 +59,7 @@ SHLIB_LINK += -lshfolder -lwsock32 -lws2_32 $(filter -leay32 -lssleay32 -lcomerr
endif
all
:
def-files $(srcdir)/libpq.rc all-lib
all
:
$(PTHREAD_H_WIN32)
def-files $(srcdir)/libpq.rc all-lib
# Shared library stuff
include
$(top_srcdir)/src/Makefile.shlib
...
...
@@ -120,6 +122,11 @@ $(srcdir)/blibpqdll.def: exports.txt
$(srcdir)/libpq.rc
:
libpq.rc.in $(top_builddir)/src/Makefile.global
sed
-e
's/\(VERSION.*\),0 *$$/\1,'
`
date
'+%y%j'
|
sed
's/^0*//'
`
'/'
<
$<
>
$@
ifneq
($(PTHREAD_H_WIN32), "")
pthread.h
:
$(top_srcdir)/src/interfaces/libpq/pthread.h.win
rm
-f
$@
&&
$(LN_S)
$<
.
endif
fe-connect.o
:
fe-connect.c $(top_builddir)/src/port/pg_config_paths.h
$(top_builddir)/src/port/pg_config_paths.h
:
...
...
src/interfaces/libpq/fe-connect.c
View file @
a970a8cb
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.31
8 2005/08/23 20:45:0
6 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.31
9 2005/08/23 20:48:4
6 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -55,12 +55,8 @@
#endif
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#endif
#include "libpq/ip.h"
#include "mb/pg_wchar.h"
...
...
src/interfaces/libpq/fe-exec.c
View file @
a970a8cb
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.17
2 2005/08/23 20:45:0
7 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.17
3 2005/08/23 20:48:4
7 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -2156,16 +2156,25 @@ PQoidValue(const PGresult *res)
char
*
endptr
=
NULL
;
unsigned
long
result
;
if
(
!
res
||
!
res
->
cmdStatus
||
strncmp
(
res
->
cmdStatus
,
"INSERT "
,
7
)
!=
0
||
res
->
cmdStatus
[
7
]
<
'0'
||
res
->
cmdStatus
[
7
]
>
'9'
)
if
(
!
res
||
!
res
->
cmdStatus
||
strncmp
(
res
->
cmdStatus
,
"INSERT "
,
7
)
!=
0
)
return
InvalidOid
;
#ifdef WIN32
SetLastError
(
0
);
#else
errno
=
0
;
#endif
result
=
strtoul
(
res
->
cmdStatus
+
7
,
&
endptr
,
10
);
if
(
!
endptr
||
(
*
endptr
!=
' '
&&
*
endptr
!=
'\0'
))
if
(
!
endptr
||
(
*
endptr
!=
' '
&&
*
endptr
!=
'\0'
)
#ifndef WIN32
/*
* On WIN32, errno is not thread-safe and GetLastError() isn't set by
* strtoul(), so we can't check on this platform.
*/
||
errno
==
ERANGE
#endif
)
return
InvalidOid
;
else
return
(
Oid
)
result
;
...
...
src/interfaces/libpq/fe-misc.c
View file @
a970a8cb
...
...
@@ -23,7 +23,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.11
7 2005/08/23 20:45:0
7 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-misc.c,v 1.11
8 2005/08/23 20:48:4
7 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -1133,11 +1133,7 @@ libpq_gettext(const char *msgid)
if
(
!
already_bound
)
{
/* dgettext() preserves errno, but bindtextdomain() doesn't */
#ifdef WIN32
int
save_errno
=
GetLastError
();
#else
int
save_errno
=
errno
;
#endif
const
char
*
ldir
;
already_bound
=
true
;
...
...
src/interfaces/libpq/fe-print.c
View file @
a970a8cb
...
...
@@ -10,7 +10,7 @@
* didn't really belong there.
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-print.c,v 1.6
1 2005/08/23 20:45:0
7 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-print.c,v 1.6
2 2005/08/23 20:48:4
7 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -88,7 +88,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
int
total_line_length
=
0
;
int
usePipe
=
0
;
char
*
pagerenv
;
#if
defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if
def ENABLE_THREAD_SAFETY
sigset_t
osigset
;
bool
sigpipe_masked
=
false
;
bool
sigpipe_pending
;
...
...
@@ -189,14 +189,14 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
if
(
fout
)
{
usePipe
=
1
;
#ifndef WIN32
#ifdef ENABLE_THREAD_SAFETY
if
(
pq_block_sigpipe
(
&
osigset
,
&
sigpipe_pending
)
==
0
)
sigpipe_masked
=
true
;
#else
#ifndef WIN32
oldsigpipehandler
=
pqsignal
(
SIGPIPE
,
SIG_IGN
);
#endif
/* ENABLE_THREAD_SAFETY */
#endif
/* WIN32 */
#endif
#endif
}
else
fout
=
stdout
;
...
...
@@ -311,15 +311,16 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
_pclose
(
fout
);
#else
pclose
(
fout
);
#endif
#ifdef ENABLE_THREAD_SAFETY
/* we can't easily verify if EPIPE occurred, so say it did */
if
(
sigpipe_masked
)
pq_reset_sigpipe
(
&
osigset
,
sigpipe_pending
,
true
);
#else
#ifndef WIN32
pqsignal
(
SIGPIPE
,
oldsigpipehandler
);
#endif
/* ENABLE_THREAD_SAFETY */
#endif
/* WIN32 */
#endif
#endif
}
if
(
po
->
html3
&&
!
po
->
expanded
)
fputs
(
"</table>
\n
"
,
fout
);
...
...
src/interfaces/libpq/fe-secure.c
View file @
a970a8cb
...
...
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.6
8 2005/08/23 20:45:0
7 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.6
9 2005/08/23 20:48:4
7 momjian Exp $
*
* NOTES
* [ Most of these notes are wrong/obsolete, but perhaps not all ]
...
...
@@ -103,12 +103,8 @@
#include <sys/stat.h>
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#endif
#ifndef HAVE_STRDUP
#include "strdup.h"
...
...
@@ -393,19 +389,18 @@ pqsecure_write(PGconn *conn, const void *ptr, size_t len)
{
ssize_t
n
;
#ifndef WIN32
#ifdef ENABLE_THREAD_SAFETY
sigset_t
osigmask
;
bool
sigpipe_pending
;
bool
got_epipe
=
false
;
if
(
pq_block_sigpipe
(
&
osigmask
,
&
sigpipe_pending
)
<
0
)
return
-
1
;
#else
#ifndef WIN32
pqsigfunc
oldsighandler
=
pqsignal
(
SIGPIPE
,
SIG_IGN
);
#endif
/* ENABLE_THREAD_SAFETY */
#endif
/* WIN32 */
#endif
#endif
#ifdef USE_SSL
if
(
conn
->
ssl
)
...
...
@@ -436,7 +431,7 @@ pqsecure_write(PGconn *conn, const void *ptr, size_t len)
if
(
n
==
-
1
)
{
#if
defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if
def ENABLE_THREAD_SAFETY
if
(
SOCK_ERRNO
==
EPIPE
)
got_epipe
=
true
;
#endif
...
...
@@ -478,19 +473,19 @@ pqsecure_write(PGconn *conn, const void *ptr, size_t len)
#endif
{
n
=
send
(
conn
->
sock
,
ptr
,
len
,
0
);
#if
defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if
def ENABLE_THREAD_SAFETY
if
(
n
<
0
&&
SOCK_ERRNO
==
EPIPE
)
got_epipe
=
true
;
#endif
}
#ifndef WIN32
#ifdef ENABLE_THREAD_SAFETY
pq_reset_sigpipe
(
&
osigmask
,
sigpipe_pending
,
got_epipe
);
#else
#ifndef WIN32
pqsignal
(
SIGPIPE
,
oldsighandler
);
#endif
/* ENABLE_THREAD_SAFETY */
#endif
/* WIN32 */
#endif
#endif
return
n
;
}
...
...
@@ -1237,7 +1232,7 @@ PQgetssl(PGconn *conn)
#endif
/* USE_SSL */
#if
defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if
def ENABLE_THREAD_SAFETY
/*
* Block SIGPIPE for this thread. This prevents send()/write() from exiting
...
...
src/interfaces/libpq/libpq-int.h
View file @
a970a8cb
...
...
@@ -12,7 +12,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.10
5 2005/08/23 20:45:0
7 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/libpq-int.h,v 1.10
6 2005/08/23 20:48:4
7 momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -30,11 +30,7 @@
#endif
#ifdef ENABLE_THREAD_SAFETY
#ifdef WIN32
#include "pthread-win32.h"
#else
#include <pthread.h>
#endif
#include <signal.h>
#endif
...
...
@@ -485,7 +481,7 @@ extern void pqsecure_close(PGconn *);
extern
ssize_t
pqsecure_read
(
PGconn
*
,
void
*
ptr
,
size_t
len
);
extern
ssize_t
pqsecure_write
(
PGconn
*
,
const
void
*
ptr
,
size_t
len
);
#if
defined(ENABLE_THREAD_SAFETY) && !defined(WIN32)
#if
def ENABLE_THREAD_SAFETY
extern
int
pq_block_sigpipe
(
sigset_t
*
osigset
,
bool
*
sigpipe_pending
);
extern
void
pq_reset_sigpipe
(
sigset_t
*
osigset
,
bool
sigpipe_pending
,
bool
got_epipe
);
...
...
src/interfaces/libpq/pthread-win32.c
View file @
a970a8cb
...
...
@@ -5,14 +5,14 @@
*
* Copyright (c) 2004-2005, PostgreSQL Global Development Group
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/libpq/pthread-win32.c,v 1.
6 2005/08/23 20:45:0
7 momjian Exp $
* $PostgreSQL: pgsql/src/interfaces/libpq/pthread-win32.c,v 1.
7 2005/08/23 20:48:4
7 momjian Exp $
*
*-------------------------------------------------------------------------
*/
#include <windows.h>
#include "pthread
-win32
.h"
#include "pthread.h"
HANDLE
pthread_self
()
...
...
src/tools/thread/README
View file @
a970a8cb
...
...
@@ -14,36 +14,3 @@ If your platform requires special thread flags that are not tested by
/config/acx_pthread.m4, add PTHREAD_CFLAGS and PTHREAD_LIBS defines to
your template/${port} file.
Windows Systems
===============
Windows systems do not vary in their thread-safeness in the same way that
other systems might, nor do they generally have pthreads installed, hence
on Windows this test is skipped by the configure program (pthreads is
required by the test program, but not PostgreSQL itself). If you do wish
to test your system however, you can do so as follows:
1) Install pthreads in you Mingw/Msys environment. You can download pthreads
from ftp://sources.redhat.com/pub/pthreads-win32/.
2) Build the test program:
gcc -o thread_test.exe \
-D_REENTRANT \
-D_THREAD_SAFE \
-D_POSIX_PTHREAD_SEMANTICS \
-I../../../src/include/port/win32 \
thread_test.c \
-lwsock32 \
-lpthreadgc2
3) Run thread_test.exe. You should see output like:
dpage@PC30:/cvs/pgsql/src/tools/thread$ ./thread_test
Your GetLastError() is thread-safe.
Your system uses strerror() which is thread-safe.
getpwuid_r()/getpwuid() are not applicable to Win32 platforms.
Your system uses gethostbyname which is thread-safe.
Your platform is thread-safe.
src/tools/thread/thread_test.c
View file @
a970a8cb
...
...
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/tools/thread/thread_test.c,v 1.3
8 2005/08/23 20:45:11
momjian Exp $
* $PostgreSQL: pgsql/src/tools/thread/thread_test.c,v 1.3
9 2005/08/23 20:48:47
momjian Exp $
*
* This program tests to see if your standard libc functions use
* pthread_setspecific()/pthread_getspecific() to be thread-safe.
...
...
@@ -20,7 +20,7 @@
*-------------------------------------------------------------------------
*/
#if
!defined(IN_CONFIGURE) && !defined(WIN32)
#if
ndef IN_CONFIGURE
#include "postgres.h"
#else
/* From src/include/c.h" */
...
...
@@ -47,43 +47,12 @@ typedef char bool;
#include <fcntl.h>
#include <errno.h>
/******************************************************************
* Windows Hacks
*****************************************************************/
#ifdef WIN32
#define MAXHOSTNAMELEN 63
#include <winsock2.h>
int
mkstemp
(
char
*
template
);
int
mkstemp
(
char
*
template
)
{
FILE
*
foo
;
mktemp
(
template
);
foo
=
fopen
(
template
,
"rw"
);
if
(
!
foo
)
return
-
1
;
else
return
(
int
)
foo
;
}
#endif
/******************************************************************
* End Windows Hacks
*****************************************************************/
/* Test for POSIX.1c 2-arg sigwait() and fail on single-arg version */
#include <signal.h>
int
sigwait
(
const
sigset_t
*
set
,
int
*
sig
);
#if !defined(ENABLE_THREAD_SAFETY) && !defined(IN_CONFIGURE)
&& !(defined(WIN32))
#if !defined(ENABLE_THREAD_SAFETY) && !defined(IN_CONFIGURE)
int
main
(
int
argc
,
char
*
argv
[])
{
...
...
@@ -100,13 +69,8 @@ main(int argc, char *argv[])
static
void
func_call_1
(
void
);
static
void
func_call_2
(
void
);
#ifdef WIN32
#define TEMP_FILENAME_1 "thread_test.1.XXXXXX"
#define TEMP_FILENAME_2 "thread_test.2.XXXXXX"
#else
#define TEMP_FILENAME_1 "/tmp/thread_test.1.XXXXXX"
#define TEMP_FILENAME_2 "/tmp/thread_test.2.XXXXXX"
#endif
static
char
*
temp_filename_1
;
static
char
*
temp_filename_2
;
...
...
@@ -125,13 +89,11 @@ static char *strerror_p2;
static
bool
strerror_threadsafe
=
false
;
#endif
#ifndef WIN32
#ifndef HAVE_GETPWUID_R
static
struct
passwd
*
passwd_p1
;
static
struct
passwd
*
passwd_p2
;
static
bool
getpwuid_threadsafe
=
false
;
#endif
#endif
#if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R)
static
struct
hostent
*
hostent_p1
;
...
...
@@ -148,10 +110,6 @@ main(int argc, char *argv[])
pthread_t
thread1
,
thread2
;
int
fd
;
#ifdef WIN32
WSADATA
wsaData
;
int
err
;
#endif
if
(
argc
>
1
)
{
...
...
@@ -165,14 +123,6 @@ main(int argc, char *argv[])
dup
(
5
);
#endif
#ifdef WIN32
err
=
WSAStartup
(
MAKEWORD
(
1
,
1
),
&
wsaData
);
if
(
err
!=
0
)
{
fprintf
(
stderr
,
"Cannot start the network subsystem - %d**
\n
exiting
\n
"
,
err
);
exit
(
1
);
}
#endif
/* Make temp filenames, might not have strdup() */
temp_filename_1
=
malloc
(
strlen
(
TEMP_FILENAME_1
)
+
1
);
strcpy
(
temp_filename_1
,
TEMP_FILENAME_1
);
...
...
@@ -201,23 +151,18 @@ main(int argc, char *argv[])
while
(
thread1_done
==
0
||
thread2_done
==
0
)
sched_yield
();
/* if this is a portability problem,
* remove it */
#ifdef WIN32
printf
(
"Your GetLastError() is thread-safe.
\n
"
);
#else
printf
(
"Your errno is thread-safe.
\n
"
);
#endif
#ifndef HAVE_STRERROR_R
if
(
strerror_p1
!=
strerror_p2
)
strerror_threadsafe
=
true
;
#endif
#ifndef WIN32
#ifndef HAVE_GETPWUID_R
if
(
passwd_p1
!=
passwd_p2
)
getpwuid_threadsafe
=
true
;
#endif
#endif
#if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R)
if
(
hostent_p1
!=
hostent_p2
)
...
...
@@ -242,7 +187,6 @@ main(int argc, char *argv[])
}
#endif
#ifndef WIN32
#ifdef HAVE_GETPWUID_R
printf
(
"Your system has getpwuid_r(); it does not need getpwuid().
\n
"
);
#else
...
...
@@ -255,9 +199,6 @@ main(int argc, char *argv[])
platform_is_threadsafe
=
false
;
}
#endif
#else
printf
(
"getpwuid_r()/getpwuid() are not applicable to Win32 platforms.
\n
"
);
#endif
#ifdef HAVE_GETADDRINFO
printf
(
"Your system has getaddrinfo(); it does not need gethostbyname()
\n
"
...
...
@@ -297,30 +238,14 @@ func_call_1(void)
!defined(HAVE_GETHOSTBYNAME_R))
void
*
p
;
#endif
#ifdef WIN32
HANDLE
h1
;
HANDLE
h2
;
#endif
unlink
(
temp_filename_1
);
unlink
(
temp_filename_1
);
/* create, then try to fail on exclusive create open */
#ifdef WIN32
h1
=
CreateFile
(
temp_filename_1
,
GENERIC_WRITE
,
0
,
NULL
,
OPEN_ALWAYS
,
0
,
NULL
);
h2
=
CreateFile
(
temp_filename_1
,
GENERIC_WRITE
,
0
,
NULL
,
CREATE_NEW
,
0
,
NULL
);
if
(
h1
==
INVALID_HANDLE_VALUE
||
GetLastError
()
!=
ERROR_FILE_EXISTS
)
#else
if
(
open
(
temp_filename_1
,
O_RDWR
|
O_CREAT
,
0600
)
<
0
||
open
(
temp_filename_1
,
O_RDWR
|
O_CREAT
|
O_EXCL
,
0600
)
>=
0
)
#endif
{
#ifdef WIN32
fprintf
(
stderr
,
"Could not create file in current directory or
\n
"
);
fprintf
(
stderr
,
"Could not generate failure for create file in current directory **
\n
exiting
\n
"
);
#else
fprintf
(
stderr
,
"Could not create file in /tmp or
\n
"
);
fprintf
(
stderr
,
"Could not generate failure for create file in /tmp **
\n
exiting
\n
"
);
#endif
exit
(
1
);
}
...
...
@@ -331,17 +256,9 @@ func_call_1(void)
errno1_set
=
1
;
while
(
errno2_set
==
0
)
sched_yield
();
#ifdef WIN32
if
(
GetLastError
()
!=
ERROR_FILE_EXISTS
)
#else
if
(
errno
!=
EEXIST
)
#endif
{
#ifdef WIN32
fprintf
(
stderr
,
"GetLastError() not thread-safe **
\n
exiting
\n
"
);
#else
fprintf
(
stderr
,
"errno not thread-safe **
\n
exiting
\n
"
);
#endif
unlink
(
temp_filename_1
);
exit
(
1
);
}
...
...
@@ -357,7 +274,6 @@ func_call_1(void)
*/
#endif
#ifndef WIN32
#ifndef HAVE_GETPWUID_R
passwd_p1
=
getpwuid
(
0
);
p
=
getpwuid
(
1
);
...
...
@@ -367,7 +283,6 @@ func_call_1(void)
passwd_p1
=
NULL
;
/* force thread-safe failure report */
}
#endif
#endif
#if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R)
/* threads do this in opposite order */
...
...
@@ -397,12 +312,7 @@ func_call_2(void)
unlink
(
temp_filename_2
);
/* open non-existant file */
#ifdef WIN32
CreateFile
(
temp_filename_2
,
GENERIC_WRITE
,
0
,
NULL
,
OPEN_EXISTING
,
0
,
NULL
);
if
(
GetLastError
()
!=
ERROR_FILE_NOT_FOUND
)
#else
if
(
open
(
temp_filename_2
,
O_RDONLY
,
0600
)
>=
0
)
#endif
{
fprintf
(
stderr
,
"Read-only open succeeded without create **
\n
exiting
\n
"
);
exit
(
1
);
...
...
@@ -415,17 +325,9 @@ func_call_2(void)
errno2_set
=
1
;
while
(
errno1_set
==
0
)
sched_yield
();
#ifdef WIN32
if
(
GetLastError
()
!=
ENOENT
)
#else
if
(
errno
!=
ENOENT
)
#endif
{
#ifdef WIN32
fprintf
(
stderr
,
"GetLastError() not thread-safe **
\n
exiting
\n
"
);
#else
fprintf
(
stderr
,
"errno not thread-safe **
\n
exiting
\n
"
);
#endif
unlink
(
temp_filename_2
);
exit
(
1
);
}
...
...
@@ -441,7 +343,6 @@ func_call_2(void)
*/
#endif
#ifndef WIN32
#ifndef HAVE_GETPWUID_R
passwd_p2
=
getpwuid
(
2
);
p
=
getpwuid
(
3
);
...
...
@@ -451,7 +352,6 @@ func_call_2(void)
passwd_p2
=
NULL
;
/* force thread-safe failure report */
}
#endif
#endif
#if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETHOSTBYNAME_R)
/* threads do this in opposite order */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment