thrift-dev mailing list archives

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


Ben Craig updated THRIFT-1753:

    Attachment: cleaner_port3.patch

Addresses the same issues mentioned above, plus it fixes THRIFT-990 by making everything use
gettimeofday.  In addition, very little code should be using timespecs now.  Code dealing
directly with POSIX wait functions, and code that clients can use directly still use timespecs,
but everything else uses timevals now.
> Multiple C++ Windows, OSX, and iOS portability issues
> -----------------------------------------------------
>                 Key: THRIFT-1753
>                 URL:
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.9, 1.0
>         Environment: Windows MSVC10, MSVC11
> OSX GCC-4.2
> iOS Clang-4.0
>            Reporter: Ben Craig
>             Fix For: 1.0
>         Attachments: cleaner_port2.patch, cleaner_port3.patch
> 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 
> warnings.
> *   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 
> support
> *   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