Commit 5838cbbb authored by Dag Erling Smørgrav's avatar Dag Erling Smørgrav

Merged revisions 2222-2228 via svnmerge from

svn+ssh://projects.linpro.no/svn/varnish/trunk/varnish-cache

........
  r2222 | des | 2007-11-01 22:47:58 +0100 (Thu, 01 Nov 2007) | 2 lines
  
  Add Solaris support.  Avoid kshisms.
........
  r2223 | des | 2007-11-01 22:48:54 +0100 (Thu, 01 Nov 2007) | 2 lines
  
  Add missing <strings.h>
........
  r2224 | des | 2007-11-01 22:52:34 +0100 (Thu, 01 Nov 2007) | 2 lines
  
  Don't rely on non-portable <paths.h>
........
  r2225 | des | 2007-11-01 22:53:59 +0100 (Thu, 01 Nov 2007) | 2 lines
  
  Header cleanup.
........
  r2226 | des | 2007-11-01 22:57:44 +0100 (Thu, 01 Nov 2007) | 2 lines
  
  Fix the struct statvfs issue.
........
  r2227 | des | 2007-11-02 15:09:17 +0100 (Fri, 02 Nov 2007) | 3 lines
  
  Test whether SO_{RCV,SND}TIMEO work (they are defined but unimplemented
  on Solaris, so simply checking for their presence is not enough)
........
  r2228 | des | 2007-11-03 13:30:06 +0100 (Sat, 03 Nov 2007) | 2 lines
  
  Typo in previous commit.
........


git-svn-id: http://www.varnish-cache.org/svn/branches/1.1@2239 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent c55aa6fd
...@@ -17,12 +17,15 @@ FreeBSD) ...@@ -17,12 +17,15 @@ FreeBSD)
Linux) Linux)
LIBTOOLIZE=libtoolize LIBTOOLIZE=libtoolize
;; ;;
SunOS)
LIBTOOLIZE=libtoolize
;;
*) *)
warn "unrecognized platform:" `uname -s` warn "unrecognized platform:" `uname -s`
LIBTOOLIZE=libtoolize LIBTOOLIZE=libtoolize
esac esac
automake_version=$(automake --version | tr ' ' '\n' | egrep '^[0-9]\.[0-9a-z.-]+') automake_version=`automake --version | tr ' ' '\n' | egrep '^[0-9]\.[0-9a-z.-]+'`
if [ -z "$automake_version" ] ; then if [ -z "$automake_version" ] ; then
warn "unable to determine automake version" warn "unable to determine automake version"
else else
......
...@@ -91,17 +91,22 @@ sock_test(int fd) ...@@ -91,17 +91,22 @@ sock_test(int fd)
if (memcmp(&lin, &linger, l)) if (memcmp(&lin, &linger, l))
need_linger = 1; need_linger = 1;
#ifdef SO_SNDTIMEO_WORKS
l = sizeof tv; l = sizeof tv;
AZ(getsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, &l)); AZ(getsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, &l));
assert(l == sizeof tv); assert(l == sizeof tv);
if (memcmp(&tv, &tv_sndtimeo, l)) if (memcmp(&tv, &tv_sndtimeo, l))
need_sndtimeo = 1; need_sndtimeo = 1;
#endif
#ifdef SO_RCVTIMEO_WORKS
l = sizeof tv; l = sizeof tv;
AZ(getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, &l)); AZ(getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, &l));
assert(l == sizeof tv); assert(l == sizeof tv);
if (memcmp(&tv, &tv_rcvtimeo, l)) if (memcmp(&tv, &tv_rcvtimeo, l))
need_rcvtimeo = 1; need_rcvtimeo = 1;
#endif
need_test = 0; need_test = 0;
} }
...@@ -118,12 +123,16 @@ VCA_Prep(struct sess *sp) ...@@ -118,12 +123,16 @@ VCA_Prep(struct sess *sp)
if (need_linger) if (need_linger)
AZ(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER, AZ(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER,
&linger, sizeof linger)); &linger, sizeof linger));
#ifdef SO_SNDTIMEO_WORKS
if (need_sndtimeo) if (need_sndtimeo)
AZ(setsockopt(sp->fd, SOL_SOCKET, SO_SNDTIMEO, AZ(setsockopt(sp->fd, SOL_SOCKET, SO_SNDTIMEO,
&tv_sndtimeo, sizeof tv_sndtimeo)); &tv_sndtimeo, sizeof tv_sndtimeo));
#endif
#ifdef SO_RCVTIMEO_WORKS
if (need_rcvtimeo) if (need_rcvtimeo)
AZ(setsockopt(sp->fd, SOL_SOCKET, SO_RCVTIMEO, AZ(setsockopt(sp->fd, SOL_SOCKET, SO_RCVTIMEO,
&tv_rcvtimeo, sizeof tv_rcvtimeo)); &tv_rcvtimeo, sizeof tv_rcvtimeo));
#endif
} }
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
...@@ -154,6 +163,7 @@ vca_acct(void *arg) ...@@ -154,6 +163,7 @@ vca_acct(void *arg)
need_test = 1; need_test = 1;
while (1) { while (1) {
#ifdef SO_SNDTIMEO_WORKS
if (params->send_timeout != tv_sndtimeo.tv_sec) { if (params->send_timeout != tv_sndtimeo.tv_sec) {
need_test = 1; need_test = 1;
tv_sndtimeo.tv_sec = params->send_timeout; tv_sndtimeo.tv_sec = params->send_timeout;
...@@ -162,6 +172,8 @@ vca_acct(void *arg) ...@@ -162,6 +172,8 @@ vca_acct(void *arg)
SO_SNDTIMEO, SO_SNDTIMEO,
&tv_sndtimeo, sizeof tv_sndtimeo)); &tv_sndtimeo, sizeof tv_sndtimeo));
} }
#endif
#ifdef SO_RCVTIMEO_WORKS
if (params->sess_timeout != tv_rcvtimeo.tv_sec) { if (params->sess_timeout != tv_rcvtimeo.tv_sec) {
need_test = 1; need_test = 1;
tv_rcvtimeo.tv_sec = params->sess_timeout; tv_rcvtimeo.tv_sec = params->sess_timeout;
...@@ -170,6 +182,7 @@ vca_acct(void *arg) ...@@ -170,6 +182,7 @@ vca_acct(void *arg)
SO_RCVTIMEO, SO_RCVTIMEO,
&tv_rcvtimeo, sizeof tv_rcvtimeo)); &tv_rcvtimeo, sizeof tv_rcvtimeo));
} }
#endif
i = poll(pfd, heritage.nsocks, 1000); i = poll(pfd, heritage.nsocks, 1000);
for (j = 0; j < heritage.nsocks; j++) { for (j = 0; j < heritage.nsocks; j++) {
if (pfd[j].revents == 0) if (pfd[j].revents == 0)
......
...@@ -31,13 +31,14 @@ ...@@ -31,13 +31,14 @@
* HTTP request storage and manipulation * HTTP request storage and manipulation
*/ */
#include <stdio.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <unistd.h> #include <unistd.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <ctype.h> #include <strings.h>
#include "heritage.h" #include "heritage.h"
#include "shmlog.h" #include "shmlog.h"
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <sys/param.h> #include <sys/param.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <sys/mount.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/stat.h> #include <sys/stat.h>
...@@ -120,7 +119,13 @@ struct smf_sc { ...@@ -120,7 +119,13 @@ struct smf_sc {
static void static void
smf_calcsize(struct smf_sc *sc, const char *size, int newfile) smf_calcsize(struct smf_sc *sc, const char *size, int newfile)
{ {
#if defined(HAVE_SYS_STATVFS_H)
struct statvfs fsst;
#elif defined(HAVE_SYS_MOUNT_H) || defined(HAVE_SYS_VFS_H)
struct statfs fsst; struct statfs fsst;
#else
#error no struct statfs / struct statvfs
#endif
uintmax_t l, fssize; uintmax_t l, fssize;
unsigned bs; unsigned bs;
char suff[2]; char suff[2];
...@@ -132,7 +137,13 @@ smf_calcsize(struct smf_sc *sc, const char *size, int newfile) ...@@ -132,7 +137,13 @@ smf_calcsize(struct smf_sc *sc, const char *size, int newfile)
AZ(fstat(sc->fd, &st)); AZ(fstat(sc->fd, &st));
xxxassert(S_ISREG(st.st_mode)); xxxassert(S_ISREG(st.st_mode));
#if defined(HAVE_SYS_STATVFS_H)
AZ(fstatvfs(sc->fd, &fsst));
#elif defined(HAVE_SYS_MOUNT_H) || defined(HAVE_SYS_VFS_H)
AZ(fstatfs(sc->fd, &fsst)); AZ(fstatfs(sc->fd, &fsst));
#else
#error no struct statfs / struct statvfs
#endif
/* We use units of the larger of filesystem blocksize and pagesize */ /* We use units of the larger of filesystem blocksize and pagesize */
bs = sc->pagesize; bs = sc->pagesize;
......
...@@ -114,6 +114,45 @@ AC_CHECK_FUNCS([kqueue]) ...@@ -114,6 +114,45 @@ AC_CHECK_FUNCS([kqueue])
AC_CHECK_FUNCS([epoll_ctl]) AC_CHECK_FUNCS([epoll_ctl])
AC_CHECK_FUNCS([poll]) AC_CHECK_FUNCS([poll])
# Solaris defines SO_{RCV,SND}TIMEO, but does not implement them
AC_CACHE_CHECK([whether SO_RCVTIMEO works],
[ac_cv_so_rcvtimeo_works],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
]],[[
int sd = socket(AF_INET, SOCK_STREAM, 0);
struct timeval tv = { 1, 0 };
return !!setsockopt(sd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv);
]])],
[ac_cv_so_rcvtimeo_works=yes],
[ac_cv_so_rcvtimeo_works=no])
])
if test "$ac_cv_so_rcvtimeo_works" = yes; then
AC_DEFINE([SO_RCVTIMEO_WORKS], [1], [Define if SO_RCVTIMEO works])
fi
AC_CACHE_CHECK([whether SO_SNDTIMEO works],
[ac_cv_so_sndtimeo_works],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM([[
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
]],[[
int sd = socket(AF_INET, SOCK_STREAM, 0);
struct timeval tv = { 1, 0 };
return !!setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof tv);
]])],
[ac_cv_so_sndtimeo_works=yes],
[ac_cv_so_sndtimeo_works=no])
])
if test "$ac_cv_so_sndtimeo_works" = yes; then
AC_DEFINE([SO_SNDTIMEO_WORKS], [1], [Define if SO_SNDTIMEO works])
fi
# Run-time directory # Run-time directory
VARNISH_STATE_DIR='${localstatedir}/varnish' VARNISH_STATE_DIR='${localstatedir}/varnish'
AC_SUBST(VARNISH_STATE_DIR) AC_SUBST(VARNISH_STATE_DIR)
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <strings.h>
#include "vsb.h" #include "vsb.h"
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <paths.h>
#include <stdlib.h> #include <stdlib.h>
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
...@@ -79,7 +78,7 @@ daemon(int nochdir, int noclose) ...@@ -79,7 +78,7 @@ daemon(int nochdir, int noclose)
if (!nochdir) if (!nochdir)
(void)chdir("/"); (void)chdir("/");
if (!noclose && (fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
(void)dup2(fd, STDIN_FILENO); (void)dup2(fd, STDIN_FILENO);
(void)dup2(fd, STDOUT_FILENO); (void)dup2(fd, STDOUT_FILENO);
(void)dup2(fd, STDERR_FILENO); (void)dup2(fd, STDERR_FILENO);
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <strings.h>
#ifndef HAVE_STRLCPY #ifndef HAVE_STRLCPY
#include "compat/strlcpy.h" #include "compat/strlcpy.h"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment