Fix spurious warnings and workaround possible aliasing porblems (-fno-strict-aliasing)
g0dil [Mon, 26 Apr 2010 11:28:47 +0000 (11:28 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1606 270642c3-0616-0410-b53a-bc976706d245

SConstruct
senf/Scheduler/FIFORunner.cc
senf/Scheduler/SignalEvent.cc
senf/Scheduler/TimerSource.cc
senf/Socket/Protocols/BSDSocketAddress.cci
senf/Socket/Protocols/INet/INet4Address.cci
senf/Socket/Protocols/INet/TCPSocketHandle.test.cc
site_scons/senfutil.py

index 579a0ad..17e18b6 100644 (file)
@@ -97,7 +97,7 @@ env.Append(
    INLINE_OPTS_NORMAL     = [ '-finline-limit=5000' ],
    INLINE_OPTS            = [ '$INLINE_OPTS_NORMAL' ],
    CXXFLAGS               = [ '-Wall', '-Woverloaded-virtual', '-Wno-long-long', '$INLINE_OPTS',
-                              '-pipe', '$CXXFLAGS_' ],
+                              '-pipe', '$CXXFLAGS_', '-fno-strict-aliasing' ],
    CXXFLAGS_              = senfutil.BuildTypeOptions('CXXFLAGS'),
    CXXFLAGS_final         = [ '-O3' ],
    CXXFLAGS_normal        = [ '-O2', '-g' ],
index 2d8f706..ec93559 100644 (file)
@@ -1,6 +1,6 @@
 // $Id$
 //
-// Copyright (C) 2008 
+// Copyright (C) 2008
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
@@ -45,7 +45,7 @@
 ///////////////////////////////cc.p////////////////////////////////////////
 
 prefix_ senf::scheduler::detail::FIFORunner::FIFORunner()
-    : tasks_ (), next_ (tasks_.end()), watchdogRunning_ (false), watchdogMs_ (1000), 
+    : tasks_ (), next_ (tasks_.end()), watchdogRunning_ (false), watchdogMs_ (1000),
       watchdogAbort_ (false), watchdogCount_(0), hangCount_ (0), yield_ (false)
 {
     struct sigevent ev;
@@ -89,7 +89,7 @@ prefix_ void senf::scheduler::detail::FIFORunner::startWatchdog()
         timer.it_interval.tv_nsec = (watchdogMs_ % 1000) * 1000000ul;
         timer.it_value.tv_sec = timer.it_interval.tv_sec;
         timer.it_value.tv_nsec = timer.it_interval.tv_nsec;
-        
+
         if (timer_settime(watchdogId_, 0, &timer, 0) < 0)
             SENF_THROW_SYSTEM_EXCEPTION("timer_settime()");
 
@@ -153,12 +153,12 @@ prefix_ void senf::scheduler::detail::FIFORunner::run()
 
         f = l; ++f;
         l = TaskList::current(normalPriorityEnd_);
-        run(f, l); 
+        run(f, l);
         if (yield_) {
             yield_ = false;
             continue;
         }
-       
+
         f = l; ++f;
         l = tasks_.end();
         run(f, l);
@@ -193,10 +193,10 @@ prefix_ void senf::scheduler::detail::FIFORunner::run(TaskList::iterator f, Task
 
     using namespace boost::lambda;
     ScopeExit atExit ((
-                          var(watchdogCount_) = 0, 
+                          var(watchdogCount_) = 0,
                           var(next_) = l
                      ));
-    
+
     while (next_ != end) {
         TaskInfo & task (*next_);
         if (task.runnable_) {
@@ -223,11 +223,11 @@ prefix_ senf::scheduler::detail::FIFORunner::TaskList::iterator
 senf::scheduler::detail::FIFORunner::priorityEnd(TaskInfo::Priority p)
 {
     switch (p) {
-    case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_LOW : 
+    case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_LOW :
         return tasks_.end();
-    case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_NORMAL : 
+    case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_NORMAL :
         return TaskList::current(normalPriorityEnd_);
-    case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_HIGH : 
+    case senf::scheduler::detail::FIFORunner::TaskInfo::PRIORITY_HIGH :
         return TaskList::current(highPriorityEnd_);
     }
     return tasks_.begin();
@@ -250,33 +250,34 @@ prefix_ void senf::scheduler::detail::FIFORunner::watchdogError()
     static char const hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                                 'a', 'b', 'c', 'd', 'e', 'f' };
     static void * entries[SENF_DEBUG_BACKTRACE_NUMCALLERS];
-    
-    write(1, "\n\n*** Scheduler task hanging (pid ",34);
+
+    // We don't care if the write commands below fail, we just give our best to inform the user
+    (void) write(1, "\n\n*** Scheduler task hanging (pid ",34);
     static char pid[7];
     ::snprintf(pid, 7, "%6d", ::getpid());
     pid[6] = 0;
-    write(1, pid, 6);
-    write(1, "): ", 3);
-    write(1, runningName_.c_str(), runningName_.size());
-    write(1, " at\n ", 3);
+    (void) write(1, pid, 6);
+    (void) write(1, "): ", 3);
+    (void) write(1, runningName_.c_str(), runningName_.size());
+    (void) write(1, " at\n ", 3);
 #ifdef SENF_DEBUG
     unsigned nEntries( ::backtrace(entries, SENF_DEBUG_BACKTRACE_NUMCALLERS) );
     for (unsigned i (0); i < nEntries; ++i) {
         write(1, " 0x", 3);
         for (unsigned j (sizeof(void*)); j > 0; --j) {
             uintptr_t v ( reinterpret_cast<uintptr_t>(entries[i]) >> (8*(j-1)) );
-            write(1, &(hex[ (v >> 4) & 0x0f ]), 1);
-            write(1, &(hex[ (v     ) & 0x0f ]), 1);
+            (void) write(1, &(hex[ (v >> 4) & 0x0f ]), 1);
+            (void) write(1, &(hex[ (v     ) & 0x0f ]), 1);
         }
     }
 #endif
-    write(1, "\n", 1);
-        
+    (void) write(1, "\n", 1);
+
 #ifdef SENF_DEBUG
-    write(1, "Task was initialized at\n", 24);
-    write(1, runningBacktrace_.c_str(), runningBacktrace_.size());
+    (void) write(1, "Task was initialized at\n", 24);
+    (void) write(1, runningBacktrace_.c_str(), runningBacktrace_.size());
 #endif
-    write(1, "\n", 1);
+    (void) write(1, "\n", 1);
     if (watchdogAbort_)
         assert(false);
 }
@@ -285,7 +286,7 @@ prefix_ void senf::scheduler::detail::FIFORunner::watchdogError()
 #undef prefix_
 //#include "FIFORunner.mpp"
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100
index cf6128e..93b9bb0 100644 (file)
@@ -1,6 +1,6 @@
 // $Id$
 //
-// Copyright (C) 2008 
+// Copyright (C) 2008
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
@@ -59,7 +59,7 @@ prefix_ void senf::scheduler::detail::SignalDispatcher::add(SignalEvent & event)
 {
     SignalSet::iterator i (handlers_.find(event));
     if (i != handlers_.end())
-        throw DuplicateSignalRegistrationException() 
+        throw DuplicateSignalRegistrationException()
             << " for signal " << signalName(event.signal_) << " (" << event.signal_ << ")";
 
     handlers_.insert(event);
@@ -114,9 +114,9 @@ prefix_ void senf::scheduler::detail::SignalDispatcher::sigHandler(int signal, :
 {
     SENF_ASSERT( alive() );
     // The manpage says, si_signo is unused in linux so we set it here
-    siginfo->si_signo = signal; 
+    siginfo->si_signo = signal;
     // We can't do much on error anyway so we ignore errors here
-    write(instance().sigPipe_[1], siginfo, sizeof(*siginfo));
+    (void) write(instance().sigPipe_[1], siginfo, sizeof(*siginfo));
 }
 
 prefix_ void senf::scheduler::SignalEvent::v_run()
@@ -140,7 +140,7 @@ prefix_ std::string senf::scheduler::SignalEvent::v_info()
 #undef prefix_
 //#include "SignalEvent.mpp"
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100
index df05438..34f34c3 100644 (file)
@@ -1,6 +1,6 @@
 // $Id$
 //
-// Copyright (C) 2009 
+// Copyright (C) 2009
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
 // Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
@@ -52,7 +52,7 @@ prefix_ senf::scheduler::detail::POSIXTimerSource::POSIXTimerSource()
         SENF_THROW_SYSTEM_EXCEPTION("pipe()");
     senf::scheduler::detail::FdManager::instance().set(
         timerPipe_[0], detail::FdManager::EV_READ, this);
-    
+
     sigemptyset(&sigSet_);
     sigaddset(&sigSet_, SIGALRM);
     sigprocmask(SIG_BLOCK, &sigSet_, 0);
@@ -126,14 +126,17 @@ prefix_ void senf::scheduler::detail::POSIXTimerSource::sigHandler(int,
     if (siginfo->si_value.sival_ptr == 0)
         return;
     static char data = '\xD0';
-    write(static_cast<POSIXTimerSource*>(siginfo->si_value.sival_ptr)->timerPipe_[1], 
-          &data, sizeof(data));
+    // If the write fails there's not much we can do anyways ...
+    (void) write(static_cast<POSIXTimerSource*>(siginfo->si_value.sival_ptr)->timerPipe_[1],
+                 &data, sizeof(data));
 }
 
 prefix_ void senf::scheduler::detail::POSIXTimerSource::signal(int events)
 {
     char data;
-    read(timerPipe_[0], &data, sizeof(data));
+    // This should never fail since we are reading a single character from a signaled
+    // filedescriptor
+    (void) read(timerPipe_[0], &data, sizeof(data));
     timeoutEnabled_ = false;
 }
 
@@ -249,7 +252,8 @@ prefix_ bool senf::scheduler::detail::TimerFDTimerSource::haveTimerFD()
 prefix_ void senf::scheduler::detail::TimerFDTimerSource::signal(int events)
 {
     uint64_t expirations (0);
-    read(timerfd_, &expirations, sizeof(expirations));
+    // We ignore the return value since we ignore the value read anyways
+    (void) read(timerfd_, &expirations, sizeof(expirations));
 }
 
 prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule()
@@ -270,7 +274,7 @@ prefix_ void senf::scheduler::detail::TimerFDTimerSource::reschedule()
 #undef prefix_
 //#include "TimerSource.mpp"
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100
index 4c4084f..fb15e6e 100644 (file)
@@ -187,12 +187,12 @@ senf::GenericBSDSocketAddress::operator=(const GenericBSDSocketAddress& other)
 prefix_ struct sockaddr const * senf::GenericBSDSocketAddress::sockaddr_p()
     const
 {
-    return reinterpret_cast<struct sockaddr const *>(& addr_);
+    return static_cast<struct sockaddr const *>(static_cast<void const *>(& addr_));
 }
 
 prefix_ struct sockaddr * senf::GenericBSDSocketAddress::sockaddr_p()
 {
-    return reinterpret_cast<struct sockaddr *>(& addr_);
+    return static_cast<struct sockaddr *>(static_cast<void *>(& addr_));
 }
 
 /////////////////////////////cci.e///////////////////////////////////////
index 1fd97b3..26a92ee 100644 (file)
@@ -46,13 +46,13 @@ prefix_ senf::INet4Address senf::INet4Address::from_inaddr(inaddr_type v)
 
 prefix_ senf::INet4Address::inaddr_type & senf::INet4Address::iref()
 {
-    return *reinterpret_cast<inaddr_type *>(&(*this)[0]);
+    return *static_cast<inaddr_type *>(static_cast<void *>((&(*this)[0])));
 }
 
 prefix_ senf::INet4Address::inaddr_type senf::INet4Address::iref()
     const
 {
-    return *reinterpret_cast<inaddr_type const *>(&(*this)[0]);
+    return *static_cast<inaddr_type const *>(static_cast<void const *>(&(*this)[0]));
 }
 
 prefix_ senf::INet4Address::inaddr_type senf::INet4Address::inaddr()
index 7e1d051..ce26756 100644 (file)
@@ -69,7 +69,7 @@ namespace {
             int n = read(sock,buffer,1024);
             if (n == 4 && strncmp(buffer,"QUIT",4) == 0)
                 break;
-            write(sock,buffer,n);
+            (void) write(sock,buffer,n);
         }
 
         if (shutdown(sock, SHUT_RDWR) < 0) fail("server_v4","shutdown()");
@@ -99,7 +99,7 @@ namespace {
             int n = read(sock,buffer,1024);
             if (n == 4 && strncmp(buffer,"QUIT",4) == 0)
                 break;
-            write(sock,buffer,n);
+            (void) write(sock,buffer,n);
         }
 
         if (shutdown(sock, SHUT_RDWR) < 0) fail("server_v6","shutdown()");
@@ -260,7 +260,7 @@ namespace {
             int n = read(sock,buffer,1024);
             if (n == 4 && strncmp(buffer,"QUIT",4) == 0)
                 break;
-            write(sock,buffer,n);
+            (void) write(sock,buffer,n);
         }
 
         if (shutdown(sock, SHUT_RDWR) < 0) fail("client_v4","shutdown()");
@@ -284,7 +284,7 @@ namespace {
             int n = read(sock,buffer,1024);
             if (n == 4 && strncmp(buffer,"QUIT",4) == 0)
                 break;
-            write(sock,buffer,n);
+            (void) write(sock,buffer,n);
         }
 
         if (shutdown(sock, SHUT_RDWR) < 0) fail("client_v6","shutdown()");
index 4a56ac2..246f72e 100644 (file)
@@ -79,7 +79,7 @@ def SetupForSENF(env, senf_path = []):
     env.Append(
         LIBS              = [ 'rt' ],
         
-        CXXFLAGS          = [ '-Wno-long-long', '$CXXFLAGS_' ],
+        CXXFLAGS          = [ '-Wno-long-long', '$CXXFLAGS_', '-fno-strict-aliasing' ],
         CXXFLAGS_         = BuildTypeOptions('CXXFLAGS'),
         
         CPPDEFINES        = [ '$expandLogOption', '$CPPDEFINES_' ],