[Spread-cvs] commit: r280 - in trunk: . daemon libspread
jonathan at spread.org
jonathan at spread.org
Fri Sep 23 13:09:02 EDT 2005
Author: jonathan
Date: 2005-09-23 13:09:01 -0400 (Fri, 23 Sep 2005)
New Revision: 280
Modified:
trunk/configure
trunk/configure.in
trunk/daemon/data_link.c
trunk/daemon/defines.h
trunk/daemon/events.c
trunk/daemon/session.c
trunk/libspread/sp.c
Log:
Fixes for compile warnings and type misdetection in configure script.
Fixes type-punning dereferences caught by new strict aliasing warning by using
correct "struct timeval" for select calls timeout.
Does NOT disable new gcc 4.0 strict-aliasing optimization, as it might be safe with these fixes.
Modified: trunk/configure
===================================================================
--- trunk/configure 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/configure 2005-09-23 17:09:01 UTC (rev 280)
@@ -6937,6 +6937,7 @@
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <time.h>
+ #include <sys/time.h>
#include <sys/types.h>
int
main ()
Modified: trunk/configure.in
===================================================================
--- trunk/configure.in 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/configure.in 2005-09-23 17:09:01 UTC (rev 280)
@@ -157,6 +157,7 @@
AC_CACHE_CHECK([for struct timezone type], ac_cv_have_struct_timezone, [
AC_TRY_COMPILE(
[ #include <time.h>
+ #include <sys/time.h>
#include <sys/types.h> ],
[ struct timezone opt; ],
[ ac_cv_have_struct_timezone="yes" ],
Modified: trunk/daemon/data_link.c
===================================================================
--- trunk/daemon/data_link.c 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/daemon/data_link.c 2005-09-23 17:09:01 UTC (rev 280)
@@ -166,7 +166,7 @@
#endif /* ARCH_SCATTER_NONE */
static struct sockaddr_in soc_addr;
-static sp_time select_delay = { 0, 10000 };
+static struct timeval select_delay = { 0, 10000 };
int ret;
int total_len;
int i;
@@ -227,7 +227,7 @@
send_errormsg = sock_strerror(sock_errno);
Alarm( DATA_LINK, "DL_send: delaying after failure in send to %d.%d.%d.%d, ret is %d\n",
IP1(address), IP2(address), IP3(address), IP4(address), ret);
- select( 0, 0, 0, 0, (struct timeval *)&select_delay );
+ select( 0, 0, 0, 0, &select_delay );
}
}
if (ret < 0)
Modified: trunk/daemon/defines.h
===================================================================
--- trunk/daemon/defines.h 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/daemon/defines.h 2005-09-23 17:09:01 UTC (rev 280)
@@ -109,7 +109,11 @@
/* (or die trying) */
#ifndef HAVE_SOCKOPT_LEN_T
+# ifdef __linux
+typedef socklen_t sockopt_len_t;
+# else
typedef int sockopt_len_t;
+# endif
#endif
#ifndef HAVE_U_INT
Modified: trunk/daemon/events.c
===================================================================
--- trunk/daemon/events.c 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/daemon/events.c 2005-09-23 17:09:01 UTC (rev 280)
@@ -126,7 +126,7 @@
sp_time E_get_time(void)
{
-
+ struct timeval read_time;
#ifndef ARCH_PC_WIN95
#if HAVE_STRUCT_TIMEZONE
@@ -136,8 +136,10 @@
#endif
int ret;
- ret = gettimeofday( (struct timeval *)&Now, (void *)&dummy_tz );
+ ret = gettimeofday( &read_time, &dummy_tz );
if ( ret < 0 ) Alarm( EXIT, "E_get_time: gettimeofday problems.\n" );
+ Now.sec = read_time.tv_sec;
+ Now.usec = read_time.tv_usec;
#else /* ARCH_PC_WIN95 */
@@ -329,12 +331,13 @@
void E_delay( sp_time t )
{
- sp_time tmp_t;
+ struct timeval tmp_t;
- tmp_t = t;
+ tmp_t.tv_sec = t.sec;
+ tmp_t.tv_usec = t.usec;
#ifndef ARCH_PC_WIN95
- if (select(0, NULL, NULL, NULL, (struct timeval *)&tmp_t ) < 0)
+ if (select(0, NULL, NULL, NULL, &tmp_t ) < 0)
{
Alarm( EVENTS, "E_delay: select delay returned error: %s\n", strerror(errno));
}
@@ -562,7 +565,8 @@
int fd;
int fd_type;
int i,j;
- sp_time timeout, wait_timeout;
+ sp_time timeout;
+ struct timeval sel_timeout, wait_timeout;
fd_set current_mask[NUM_FDTYPES];
time_event *temp_ptr;
int first=1;
@@ -633,9 +637,10 @@
#ifdef TESTTIME
req_time = zero_sec;
#endif
- wait_timeout = zero_sec;
+ wait_timeout.tv_sec = zero_sec.sec;
+ wait_timeout.tv_usec = zero_sec.usec;
num_set = select( FD_SETSIZE, ¤t_mask[READ_FD], ¤t_mask[WRITE_FD], ¤t_mask[EXCEPT_FD],
- (struct timeval *)&wait_timeout );
+ &wait_timeout );
if (num_set == 0 && !Exit_events)
{
#ifdef BADCLOCK
@@ -650,8 +655,10 @@
#ifdef TESTTIME
req_time = E_add_time(req_time, timeout);
#endif
+ sel_timeout.tv_sec = timeout.sec;
+ sel_timeout.tv_usec = timeout.usec;
num_set = select( FD_SETSIZE, ¤t_mask[READ_FD], ¤t_mask[WRITE_FD],
- ¤t_mask[EXCEPT_FD], (struct timeval *)&timeout );
+ ¤t_mask[EXCEPT_FD], &sel_timeout );
}
#ifdef TESTTIME
start = E_get_time();
Modified: trunk/daemon/session.c
===================================================================
--- trunk/daemon/session.c 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/daemon/session.c 2005-09-23 17:09:01 UTC (rev 280)
@@ -160,7 +160,7 @@
unsigned char *c;
session *tmp;
- c = (char *) &ses->mbox;
+ c = (unsigned char *) &ses->mbox;
i = c[0] ^ c[1] ^ c[2] ^ c[3];
tmp = Sessions_hash_head[i];
if (tmp == ses)
Modified: trunk/libspread/sp.c
===================================================================
--- trunk/libspread/sp.c 2005-09-21 05:00:31 UTC (rev 279)
+++ trunk/libspread/sp.c 2005-09-23 17:09:01 UTC (rev 280)
@@ -172,6 +172,8 @@
/* We take the Struct_mutex in prepare to prevent inconsistent state
* in Session[] structs in child
*/
+#ifdef _REENTRANT
+
#ifdef HAVE_PTHREAD_ATFORK
static void sp_atfork_prepare(void)
@@ -200,6 +202,7 @@
}
#endif /* HAVE_PTHREAD_ATFORK */
+#endif /* _REENTRANT */
static void sp_initialize_locks(void)
{
@@ -242,6 +245,7 @@
int ret, num_ready;
fd_set rset,fixed_rset;
sp_time start_time, temp_time, target_time, wait_time;
+ struct timeval sel_time;
if ( len == 0 )
return(0);
@@ -253,11 +257,15 @@
FD_ZERO(&fixed_rset);
FD_SET(s, &fixed_rset);
rset = fixed_rset;
- while( ((num_ready = select(s+1, &rset, NULL, NULL, (struct timeval *)&wait_time)) == -1) && ((sock_errno == EINTR) || (sock_errno == EAGAIN) || (sock_errno == EWOULDBLOCK)) )
+ sel_time.tv_sec = wait_time.sec;
+ sel_time.tv_sec = wait_time.usec;
+ while( ((num_ready = select(s+1, &rset, NULL, NULL, &sel_time)) == -1) && ((sock_errno == EINTR) || (sock_errno == EAGAIN) || (sock_errno == EWOULDBLOCK)) )
{
temp_time = E_get_time();
if (E_compare_time(temp_time, target_time) < 0 ) {
wait_time = E_sub_time(target_time, temp_time);
+ sel_time.tv_sec = wait_time.sec;
+ sel_time.tv_sec = wait_time.usec;
} else {
printf("recv_nointr_timeout: Timed out when interrupted\n");
sock_set_errno( ERR_TIMEDOUT );
@@ -293,6 +301,7 @@
int ret, num_ready;
fd_set rset,fixed_rset,wset;
sp_time start_time, temp_time, target_time, wait_time;
+ struct timeval sel_time;
int non_blocking = 0;
int err;
int on;
@@ -305,6 +314,8 @@
start_time = E_get_time();
target_time = E_add_time(start_time, *time_out);
wait_time = *time_out;
+ sel_time.tv_sec = wait_time.sec;
+ sel_time.tv_sec = wait_time.usec;
/* set file descriptor to non-blocking */
on = 1;
ret_ioctl = ioctl( s, FIONBIO, &on);
@@ -322,11 +333,13 @@
wset = rset;
Alarmp( SPLOG_DEBUG, SESSION, "connect_nointr_timeout: connect in progress for socket %d, now wait in select\n", s);
/* wait for select to timeout (num_ready == 0), give a permanent error (num_ready < 0 && sock_errno != transient). If transient error, retry after checking to make sure timeout has not expired */
- while( ((num_ready = select(s+1, &rset, &wset, NULL, (struct timeval *)&wait_time)) == -1) && ((sock_errno == EINTR) || (sock_errno == EAGAIN) || (sock_errno == EWOULDBLOCK)) )
+ while( ((num_ready = select(s+1, &rset, &wset, NULL, &sel_time)) == -1) && ((sock_errno == EINTR) || (sock_errno == EAGAIN) || (sock_errno == EWOULDBLOCK)) )
{
temp_time = E_get_time();
if (E_compare_time(temp_time, target_time) < 0 ) {
wait_time = E_sub_time(target_time, temp_time);
+ sel_time.tv_sec = wait_time.sec;
+ sel_time.tv_sec = wait_time.usec;
} else {
Alarmp( SPLOG_WARNING, SESSION, "connect_nointr_timeout: connect interrupted and select wait timesout during transient error: %s\n", sock_strerror(sock_errno));
close(s);
More information about the Spread-cvs
mailing list