The previously used getUserDefaultUILanguage() was based on the deprecated
LCID/LANGID concept. It had an increasing number of corner cases as not
every locale had associated LCIDs. The new solution is based on locale
names (string based) and will return reasonable names in more situations.
- Added a new URL::createInputStream() overload that takes an InputStreamOptions helper class to simplify stream creation.
- Modified the internals of URL and WebInputStream so that parameters are only added to the request body when ParameterHandling is set to inPostData. This allows POST data to be added via URL::withPOSTData() and sent with URL-encoded parameters.
The values in mach_timebase_info_data_t should be specified in terms of
'ticks'. On some machines, ticks may correspond to nanoseconds, but this
is not guaranteed.
Previously, if `stopTimer()` was called from within
`hiResTimerCallback()`, a call to `isTimerRunning()` immediately
following the call to `stopTimer()` would return true instead of false.
This patch fixes the issue, and adds some tests to verify the new
behaviour.
We use a manual-reset event rather than an auto-reset event to cancel IO
on the pipe. This avoids unlucky cases where new IO would start just
after signalling the event and would block indefinitely while waiting on
the newly-unsignalled event.
As far as I can tell, if a read was cancelled from a background thread,
the IO operation wasn't cancelled, so the system was poking at the
stack-allocated OVERLAPPED structure after it had been removed from the
stack, at which point something else might be occupying that region of
stack memory.
I'm pretty sure Address Sanitizer should be able to catch this sort of
thing so I'm surprised it didn't complain here.
Previously, calls to `open` blocked when creating a writeable pipe.
This could cause other calls to block indefinitely, waiting for the pipe
to become available.
Now, we open the pipe in nonblocking mode, which allows us to retry
indefinitely, checking `stopReadOperation` each time to find out whether
`close` has been called and allowing a graceful exit.
The recent IFileChooser update to the JUCE FileChooser meant that
Windows build machines must be running Vista or newer.
For compilers other than MinGW, we were already requiring that the build
machine must be running Windows 8 or newer.