]> granicus.if.org Git - postgresql/commitdiff
attached to this mail is a patch from a colleague that makes
authorBruce Momjian <bruce@momjian.us>
Wed, 5 Jul 2000 16:09:31 +0000 (16:09 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 5 Jul 2000 16:09:31 +0000 (16:09 +0000)
PostgreSQL-7.0.2 run on Linux for the Intel-IA64 architecture. It also
fixes a bug in the configure scripts that caused configure to fail on
the fcntl(F_SETLK) test.

This fix triggered a bug in the fcntl(F_SETLK) code of the Linux
kernel when used on unix domain sockets resulting in postmaster to
segfault immediately after startup. There is a fix available and
included in the kernel that will be on SuSE Linux 7.0, but kernels <=
2.2.16 still have this bug.

Reinhard Max

configure.in
src/include/port/linux.h
src/include/storage/s_lock.h

index d3199582abe61abe0536a49e05307918070c7148..c01f83d5fb2061ce36f63fd5c2a577b76b2a35dc 100644 (file)
@@ -764,7 +764,8 @@ PGAC_UNION_SEMUN
 
 
 AC_MSG_CHECKING(for fcntl(F_SETLK))
-AC_TRY_LINK([#include <fcntl.h>],
+AC_TRY_LINK([#include <stdio.h>
+#include <fcntl.h>],
            [struct flock lck;
             lck.l_whence = SEEK_SET; lck.l_start = lck.l_len = 0;
             lck.l_type = F_WRLCK;
index 2ddb34df2c5f02d349e439e33069935a9b8bea12..3555aba6d04ba325fa1e60dace83b264657da40f 100644 (file)
@@ -33,7 +33,12 @@ typedef unsigned int slock_t;
 #define HAS_TEST_AND_SET
 
 #elif defined(__arm__)
-typedef unsigned char slock_t
+typedef unsigned char slock_t;
+
+#define HAS_TEST_AND_SET
+
+#elif defined(__ia64__)
+typedef unsigned int slock_t;
 
 #define HAS_TEST_AND_SET
 
index fadd87edb7501c9dddd77c972bfc28922aa39dd0..98cbf10920a411929d65b98317ab66cac6867674 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.70 2000/04/12 17:16:51 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.71 2000/07/05 16:09:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -95,6 +95,24 @@ __asm__("lock; xchgb %0,%1": "=q"(_res), "=m"(*lock):"0"(_res));
 #endif  /* __i386__ */
 
 
+#ifdef __ia64__
+#define TAS(lock) tas(lock)
+
+static __inline__ int
+tas (volatile slock_t *lock)
+{
+  long int ret;
+
+  __asm__ __volatile__(
+       "xchg4 %0=%1,%2"
+       : "=r"(ret), "=m"(*lock)
+       : "r"(1), "1"(*lock)
+       : "memory");
+
+  return (int) ret;
+}
+#endif /* __ia64__ */
+
 
 #if defined(__arm__) || defined(__arm__)
 #define TAS(lock) tas(lock)