stack overflow on Windows 95

  • Jeremy Spiegel

    Jeremy Spiegel - 2007-01-08

    I just tried switching to using STLport for an app that must run on Windows 95.  It ran fine on other Windows OSs, but it immediately crashed on Windows 95.  I did some debugging and discovered that the crash occurs during static initialization.  At that time, a _Locale_impl is constructed with a call to _Locale_impl::Init.  That function seems to be checking a static reference count to see if it is 1, to call _Locale_impl::_S_initialize() only once.  On Windows, the reference counter uses the functions InterlockedIncrement and InterlockedDecrement (_threads.h).  These functions actually have different behavior on Windows 95 than on all later versions of Windows.  On Windows 95, instead of returning the actual reference count, they only return -1, 0, or 1, depending on whether the result is negative, zero, or positive.  So incrementing the reference count was always returning 1, so _Locale_impl::_S_initialize() would always be called.  Inside of _Locale_impl::_S_initialize(), another _Locale_impl is constructed, leading to infinite recursion and a stack overflow.  Is Windows 95 a supported platform for STLport?  If not, is there an official list of supported platforms?

    • Francois Dumont

      Francois Dumont - 2007-01-11

      To have an idea about supported platform you should take a look to build/test/unit/STATUS. There is no status about Windows 95 in it...

      This difference in behavior is surprising and not documented in MSDN. Are you interested in a fix ?

    • Jeremy Spiegel

      Jeremy Spiegel - 2007-01-13

      Older versions of MSDN have a note about this behavior, but it looks like Microsoft removed it.  There is a good description of the issue at  I'm very interested in a fix, and would be able to test it and give feedback.  I am also willing to propose/submit a fix if that would be helpful.

    • Francois Dumont

      Francois Dumont - 2007-01-13

      I also found information about this Windows 95 limitation, maybe it is the same source as yours as it is directly accessible with a simple google research.

      I have already committed a fix in SVN trunk. If you validate this version fast enough I will integrate it to STLport 5.1 branch so that it is part of next 5.1.1 version. You should certainly already know but just in case, do not forget to define _WIN32_WINDOWS or WINVER macro to 0x0400 value so that STLport know that you are building for Windows 95.

    • Jeremy Spiegel

      Jeremy Spiegel - 2007-01-17

      Thanks for getting in a fix so quickly.  I just finished running the unit tests and they pass on Windows 95.  When will the next release be out?

    • Francois Dumont

      Francois Dumont - 2007-01-17

      I expect to release 5.1.1 at beginning of february. I hope you will have time to make some tests.

    • Jeremy Spiegel

      Jeremy Spiegel - 2007-01-31

      As I stated before, the unit tests built from the trunk pass on Windows 95.  It looks like these changes haven't been ported to the 5.1 release branch.  Is this still possible?

    • Francois Dumont

      Francois Dumont - 2007-02-01

      Yes it is possible, I will.


Log in to post a comment.