thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ben Craig (JIRA)" <>
Subject [jira] [Created] (THRIFT-1753) Multiple C++ Windows, OSX, and iOS portability issues
Date Mon, 12 Nov 2012 19:47:12 GMT
Ben Craig created THRIFT-1753:

             Summary: Multiple C++ Windows, OSX, and iOS portability issues
                 Key: THRIFT-1753
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Library
    Affects Versions: 0.9, 1.0
         Environment: Windows MSVC10, MSVC11
iOS Clang-4.0
            Reporter: Ben Craig
             Fix For: 1.0

These are all in the C++ library.  Here is a summary of what I changed. 
All of these fixes make a ~5000 line patch (though a lot of that is 
deleted lines).
*   General cleanup of the msvc project
*   Using HAVE_CONFIG_H instead of force including files
*   Getting rid of some unnecessary files (stdafx.*, TargetVersion.h)
*   Significant rework of windows portability.  No longer using config.h 
and force_inc.h to make Windows look like *nix.  Instead, making lots of 
Thrift specific #defines that are vaguely *nixy, and having those forward 
to *nix or Windows stuff appropriately.  For example, THRIFT_CTIME_R calls 
ctime_r on *nix, and a wrapper thrift_ctime_r on Windows.  The old 
approach doesn't work when multiple libraries attempt the same trick.  For 
example, if openssl #defined errno to ::WSAGetLastError() as well, then 
that would cause problems.
*   Adding preprocessor flag that can optionally squelch console output. 
Default behavior is unchanged.  Console output is great for home deployed 
server apps, but it looks unprofessional for consumer apps.
*   Adding THRIFT_UNUSED_VARIABLE helper macro, to aid in squelching 
*   Adding redirector header for <functional> and <tr1/functional>.  Since 
namespaces aren't consistent (std vs std::tr1), I have added symbols to 
the apache::thrift::stdcxx namespace.  This is important for Clang / iOS 
*   usleep and sleep on Windows were both sleeping in milliseconds.  sleep 
now correctly sleeps for seconds, and usleep attempts to sleep for 
microseconds (after converting very coarsely to milliseconds).
*   Adding support for using C++11 std::thread (and mutex, and monitor). 
Thrift already supported boost::thread and posix threads.  Clients that 
use std::thread no longer need built boost libraries.  The boost headers 
are sufficient for them.  Switching from boost::thread to std::thread 
resulted in a ~50k reduction in exe size in my tests.  By default, msvc10 
and below will use boost::thread, msvc11 and up will use std::thread.
*   Fixing more 64-bit socket truncation issues in non-blocking server and 
ssl support.  openssl itself has socket truncation issues, so I could not 
fix them all.
*   Fixed THRIFT-1692 "SO_REUSEADDR allows for socket hijacking on Windows 
".  Now using SO_EXCLUSIVEADDRUSE on windows, and SO_REUSEADDR on *nix.
*   Making TFileTransport use thrift style threads instead of redoing all 
the pthread+boost stuff itself.
*   Includes, and builds upon THRIFT-1740 (Make C++ library build on OS X 
and iOS)
*   Moved several functions out of thrift/windows/config.h, and into other 
thrift/windows headers.
*   Using built-in stdint.h on Windows if available (by checking HAVE_STDINT_H) and 
using boost typedefs otherwise.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message