passenger 5.0.25 → 5.0.26
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +20 -0
- data/CONTRIBUTORS +1 -0
- data/build/cxx_dependency_map.rb +7338 -7104
- data/build/cxx_tests.rb +3 -3
- data/build/misc.rb +1 -0
- data/dev/index_cxx_dependencies.rb +3 -2
- data/resources/templates/standalone/config.erb +1 -1
- data/resources/templates/standalone/http.erb +1 -0
- data/resources/templates/standalone/server.erb +1 -0
- data/src/agent/Core/ApplicationPool/AbstractSession.h +83 -0
- data/src/agent/Core/ApplicationPool/Common.h +6 -4
- data/src/agent/Core/ApplicationPool/Options.h +4 -1
- data/src/agent/Core/ApplicationPool/Pool.h +2 -2
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +3 -6
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +3 -3
- data/src/agent/Core/ApplicationPool/Session.h +15 -27
- data/src/agent/Core/ApplicationPool/TestSession.h +188 -0
- data/src/agent/Core/Controller.h +15 -6
- data/src/agent/Core/Controller/CheckoutSession.cpp +13 -5
- data/src/agent/Core/Controller/ForwardResponse.cpp +20 -2
- data/src/agent/Core/Controller/Hooks.cpp +15 -2
- data/src/agent/Core/Controller/InitRequest.cpp +5 -1
- data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
- data/src/agent/Core/Controller/Request.h +11 -4
- data/src/agent/Core/Controller/SendRequest.cpp +34 -13
- data/src/agent/Core/Controller/StateInspectionAndConfiguration.cpp +2 -2
- data/src/agent/Core/CoreMain.cpp +27 -1
- data/src/agent/Core/OptionParser.h +11 -1
- data/src/agent/Core/SpawningKit/DirectSpawner.h +1 -0
- data/src/agent/Core/SpawningKit/SmartSpawner.h +1 -0
- data/src/agent/Core/SpawningKit/Spawner.h +21 -1
- data/src/agent/SpawnPreparer/SpawnPreparerMain.cpp +1 -1
- data/src/agent/UstRouter/OptionParser.h +7 -1
- data/src/agent/UstRouter/UstRouterMain.cpp +27 -1
- data/src/cxx_supportlib/Algorithms/MovingAverage.h +223 -0
- data/src/cxx_supportlib/Constants.h +2 -2
- data/src/cxx_supportlib/DataStructures/StringKeyTable.h +96 -40
- data/src/cxx_supportlib/ResourceLocator.h +33 -14
- data/src/cxx_supportlib/ServerKit/Channel.h +198 -69
- data/src/cxx_supportlib/ServerKit/Errors.h +6 -1
- data/src/cxx_supportlib/ServerKit/HttpRequest.h +20 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +124 -32
- data/src/cxx_supportlib/ServerKit/Server.h +65 -1
- data/src/cxx_supportlib/Utils/IOUtils.cpp +12 -22
- data/src/cxx_supportlib/Utils/JsonUtils.h +87 -1
- data/src/cxx_supportlib/Utils/StrIntUtils.cpp +16 -1
- data/src/cxx_supportlib/Utils/StrIntUtils.h +31 -1
- data/src/cxx_supportlib/Utils/VariantMap.h +6 -1
- data/src/cxx_supportlib/WatchdogLauncher.h +17 -9
- data/src/cxx_supportlib/vendor-copy/libuv/AUTHORS +43 -0
- data/src/cxx_supportlib/vendor-copy/libuv/ChangeLog +350 -1
- data/src/cxx_supportlib/vendor-copy/libuv/Makefile.am +9 -1
- data/src/cxx_supportlib/vendor-copy/libuv/README.md +48 -0
- data/src/cxx_supportlib/vendor-copy/libuv/checksparse.sh +1 -0
- data/src/cxx_supportlib/vendor-copy/libuv/common.gypi +5 -5
- data/src/cxx_supportlib/vendor-copy/libuv/configure.ac +2 -1
- data/src/cxx_supportlib/vendor-copy/libuv/gyp_uv.py +0 -3
- data/src/cxx_supportlib/vendor-copy/libuv/include/uv-version.h +5 -1
- data/src/cxx_supportlib/vendor-copy/libuv/include/uv.h +30 -3
- data/src/cxx_supportlib/vendor-copy/libuv/src/fs-poll.c +3 -3
- data/src/cxx_supportlib/vendor-copy/libuv/src/inet.c +0 -4
- data/src/cxx_supportlib/vendor-copy/libuv/src/queue.h +17 -1
- data/src/cxx_supportlib/vendor-copy/libuv/src/threadpool.c +10 -10
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/aix.c +84 -166
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/android-ifaddrs.c +11 -11
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/async.c +7 -1
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/atomic-ops.h +17 -0
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/core.c +140 -21
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin.c +15 -11
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/dl.c +4 -7
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/freebsd.c +52 -37
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fs.c +181 -60
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fsevents.c +39 -34
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/getaddrinfo.c +4 -4
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/internal.h +3 -1
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/kqueue.c +12 -4
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-core.c +38 -15
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-inotify.c +36 -8
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.c +4 -4
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.h +2 -2
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop-watcher.c +6 -1
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop.c +28 -8
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/netbsd.c +18 -16
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/openbsd.c +18 -16
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pipe.c +3 -3
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/process.c +18 -6
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/proctitle.c +2 -2
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pthread-fixes.c +1 -0
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/signal.c +2 -0
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/stream.c +47 -30
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sunos.c +13 -11
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tcp.c +43 -8
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/thread.c +21 -15
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tty.c +16 -2
- data/src/cxx_supportlib/vendor-copy/libuv/src/unix/udp.c +54 -14
- data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.c +104 -21
- data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.h +14 -1
- data/src/cxx_supportlib/vendor-copy/libuv/src/version.c +1 -5
- data/src/cxx_supportlib/vendor-copy/libuv/uv.gyp +22 -1
- data/src/nginx_module/CacheLocationConfig.c +52 -0
- data/src/nginx_module/CacheLocationConfig.c.erb +13 -1
- data/src/nginx_module/Configuration.c +1 -0
- data/src/nginx_module/Configuration.h +1 -0
- data/src/nginx_module/ConfigurationCommands.c +20 -0
- data/src/nginx_module/ConfigurationFields.h +4 -0
- data/src/nginx_module/CreateLocationConfig.c +8 -0
- data/src/nginx_module/MergeLocationConfig.c +12 -0
- data/src/nginx_module/config +31 -13
- data/src/nginx_module/ngx_http_passenger_module.c +4 -0
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +11 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +6 -1
- data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +32 -31
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +13 -2
- data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +6 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core.rb +6 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/api.rb +29 -19
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/context.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter.rb +2 -3
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/simple_json.rb +2 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/spec_helper.rb +2 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/time_point.rb +3 -17
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/transaction.rb +7 -10
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/utils.rb +11 -9
- metadata +5 -2
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2016 Phusion Holding B.V.
|
4
4
|
*
|
5
5
|
* "Passenger", "Phusion Passenger" and "Union Station" are registered
|
6
6
|
* trademarks of Phusion Holding B.V.
|
@@ -66,6 +66,7 @@
|
|
66
66
|
#endif
|
67
67
|
|
68
68
|
#include <Exceptions.h>
|
69
|
+
#include <Constants.h>
|
69
70
|
#include <Utils/Timer.h>
|
70
71
|
#include <Utils/IOUtils.h>
|
71
72
|
#include <Utils/StrIntUtils.h>
|
@@ -412,6 +413,15 @@ createTcpServer(const char *address, unsigned short port, unsigned int backlogSi
|
|
412
413
|
throw SystemException("Cannot create a TCP socket file descriptor", e);
|
413
414
|
}
|
414
415
|
|
416
|
+
optval = 1;
|
417
|
+
if (syscalls::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
|
418
|
+
&optval, sizeof(optval)) == -1)
|
419
|
+
{
|
420
|
+
int e = errno;
|
421
|
+
fprintf(stderr, "so_reuseaddr failed: %s\n", strerror(e));
|
422
|
+
}
|
423
|
+
// Ignore SO_REUSEADDR error, it's not fatal.
|
424
|
+
|
415
425
|
FdGuard guard(fd, file, line, true);
|
416
426
|
if (family == AF_INET) {
|
417
427
|
ret = syscalls::bind(fd, (const struct sockaddr *) &addr.v4, sizeof(struct sockaddr_in));
|
@@ -427,28 +437,8 @@ createTcpServer(const char *address, unsigned short port, unsigned int backlogSi
|
|
427
437
|
throw SystemException(message, e);
|
428
438
|
}
|
429
439
|
|
430
|
-
optval = 1;
|
431
|
-
if (syscalls::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
|
432
|
-
&optval, sizeof(optval)) == -1)
|
433
|
-
{
|
434
|
-
int e = errno;
|
435
|
-
fprintf(stderr, "so_reuseaddr failed: %s\n", strerror(e));
|
436
|
-
}
|
437
|
-
// Ignore SO_REUSEADDR error, it's not fatal.
|
438
|
-
|
439
|
-
#ifdef SO_REUSEPORT
|
440
|
-
optval = 1;
|
441
|
-
if (syscalls::setsockopt(fd, SOL_SOCKET, SO_REUSEPORT,
|
442
|
-
&optval, sizeof(optval)) == -1)
|
443
|
-
{
|
444
|
-
int e = errno;
|
445
|
-
fprintf(stderr, "so_reuseport failed: %s\n", strerror(e));
|
446
|
-
}
|
447
|
-
// Ignore SO_REUSEPORT error, it's not fatal.
|
448
|
-
#endif
|
449
|
-
|
450
440
|
if (backlogSize == 0) {
|
451
|
-
backlogSize =
|
441
|
+
backlogSize = DEFAULT_SOCKET_BACKLOG;
|
452
442
|
}
|
453
443
|
ret = syscalls::listen(fd, backlogSize);
|
454
444
|
if (ret == -1) {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2014-
|
3
|
+
* Copyright (c) 2014-2016 Phusion Holding B.V.
|
4
4
|
*
|
5
5
|
* "Passenger", "Phusion Passenger" and "Union Station" are registered
|
6
6
|
* trademarks of Phusion Holding B.V.
|
@@ -28,6 +28,7 @@
|
|
28
28
|
|
29
29
|
#include <string>
|
30
30
|
#include <cstdio>
|
31
|
+
#include <cstdlib>
|
31
32
|
#include <cstddef>
|
32
33
|
#include <jsoncpp/json.h>
|
33
34
|
#include <boost/cstdint.hpp>
|
@@ -202,6 +203,10 @@ jsonString(const Passenger::StaticString &str) {
|
|
202
203
|
*/
|
203
204
|
inline Json::Value
|
204
205
|
timeToJson(unsigned long long timestamp, unsigned long long now = 0) {
|
206
|
+
if (timestamp == 0) {
|
207
|
+
return Json::Value(Json::nullValue);
|
208
|
+
}
|
209
|
+
|
205
210
|
Json::Value doc;
|
206
211
|
time_t time = (time_t) timestamp / 1000000;
|
207
212
|
char buf[32];
|
@@ -229,6 +234,22 @@ timeToJson(unsigned long long timestamp, unsigned long long now = 0) {
|
|
229
234
|
return doc;
|
230
235
|
}
|
231
236
|
|
237
|
+
inline Json::Value
|
238
|
+
durationToJson(unsigned long long duration) {
|
239
|
+
Json::Value doc;
|
240
|
+
char buf[64];
|
241
|
+
|
242
|
+
doc["microseconds"] = duration;
|
243
|
+
if (duration >= 10 * 1000000) {
|
244
|
+
snprintf(buf, sizeof(buf), "%.1fs", duration / 1000000.0);
|
245
|
+
} else {
|
246
|
+
snprintf(buf, sizeof(buf), "%.1fms", duration / 1000.0);
|
247
|
+
}
|
248
|
+
doc["human_readable"] = buf;
|
249
|
+
|
250
|
+
return doc;
|
251
|
+
}
|
252
|
+
|
232
253
|
inline string
|
233
254
|
formatFloat(double val) {
|
234
255
|
char buf[64];
|
@@ -236,6 +257,38 @@ formatFloat(double val) {
|
|
236
257
|
return string(buf, size);
|
237
258
|
}
|
238
259
|
|
260
|
+
inline double
|
261
|
+
capFloatPrecision(double val) {
|
262
|
+
char buf[64];
|
263
|
+
snprintf(buf, sizeof(buf), "%.2f", val);
|
264
|
+
return atof(buf);
|
265
|
+
}
|
266
|
+
|
267
|
+
inline Json::Value
|
268
|
+
speedToJson(double speed, const string &per, double nullValue = -1) {
|
269
|
+
Json::Value doc;
|
270
|
+
if (speed == nullValue) {
|
271
|
+
doc["value"] = Json::Value(Json::nullValue);
|
272
|
+
} else {
|
273
|
+
doc["value"] = speed;
|
274
|
+
}
|
275
|
+
doc["per"] = per;
|
276
|
+
return doc;
|
277
|
+
}
|
278
|
+
|
279
|
+
inline Json::Value
|
280
|
+
averageSpeedToJson(double speed, const string &per, const string &averagedOver, double nullValue = -1) {
|
281
|
+
Json::Value doc;
|
282
|
+
if (speed == nullValue) {
|
283
|
+
doc["value"] = Json::Value(Json::nullValue);
|
284
|
+
} else {
|
285
|
+
doc["value"] = speed;
|
286
|
+
}
|
287
|
+
doc["per"] = per;
|
288
|
+
doc["averaged_over"] = averagedOver;
|
289
|
+
return doc;
|
290
|
+
}
|
291
|
+
|
239
292
|
inline Json::Value
|
240
293
|
byteSizeToJson(size_t size) {
|
241
294
|
Json::Value doc;
|
@@ -265,6 +318,39 @@ signedByteSizeToJson(long long size) {
|
|
265
318
|
return doc;
|
266
319
|
}
|
267
320
|
|
321
|
+
inline Json::Value
|
322
|
+
byteSpeedToJson(double speed, const string &per) {
|
323
|
+
Json::Value doc;
|
324
|
+
if (speed >= 0) {
|
325
|
+
doc = byteSizeToJson(speed);
|
326
|
+
} else {
|
327
|
+
doc = signedByteSizeToJson(speed);
|
328
|
+
}
|
329
|
+
doc["per"] = per;
|
330
|
+
return doc;
|
331
|
+
}
|
332
|
+
|
333
|
+
inline Json::Value
|
334
|
+
byteSpeedToJson(double speed, double nullValue, const string &per) {
|
335
|
+
Json::Value doc;
|
336
|
+
if (speed == nullValue) {
|
337
|
+
doc["bytes"] = Json::Value(Json::nullValue);
|
338
|
+
} else if (speed >= 0) {
|
339
|
+
doc = byteSizeToJson(speed);
|
340
|
+
} else {
|
341
|
+
doc = signedByteSizeToJson(speed);
|
342
|
+
}
|
343
|
+
doc["per"] = per;
|
344
|
+
return doc;
|
345
|
+
}
|
346
|
+
|
347
|
+
inline Json::Value
|
348
|
+
byteSizeAndCountToJson(size_t size, unsigned int count) {
|
349
|
+
Json::Value doc = byteSizeToJson(size);
|
350
|
+
doc["count"] = count;
|
351
|
+
return doc;
|
352
|
+
}
|
353
|
+
|
268
354
|
|
269
355
|
} // namespace Passenger
|
270
356
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2016 Phusion Holding B.V.
|
4
4
|
*
|
5
5
|
* "Passenger", "Phusion Passenger" and "Union Station" are registered
|
6
6
|
* trademarks of Phusion Holding B.V.
|
@@ -28,6 +28,7 @@
|
|
28
28
|
#include <cstdlib>
|
29
29
|
#include <cctype>
|
30
30
|
#include <cmath>
|
31
|
+
#include <cassert>
|
31
32
|
#include <utf8.h>
|
32
33
|
#include <algorithm>
|
33
34
|
#include <Exceptions.h>
|
@@ -567,6 +568,20 @@ distanceOfTimeInWords(time_t fromTime, time_t toTime) {
|
|
567
568
|
return result.str();
|
568
569
|
}
|
569
570
|
|
571
|
+
unsigned long long
|
572
|
+
timeToNextMultipleULL(unsigned long long multiple, unsigned long long now) {
|
573
|
+
if (now == 0) {
|
574
|
+
now = SystemTime::getUsec();
|
575
|
+
}
|
576
|
+
return multiple - (now % multiple);
|
577
|
+
}
|
578
|
+
|
579
|
+
double
|
580
|
+
timeToNextMultipleD(unsigned int multiple, double now) {
|
581
|
+
assert(multiple != 0);
|
582
|
+
return multiple - fmod(now, (double) multiple);
|
583
|
+
}
|
584
|
+
|
570
585
|
char *
|
571
586
|
appendData(char *pos, const char *end, const char *data, size_t size) {
|
572
587
|
size_t maxToCopy = std::min<size_t>(end - pos, size);
|
@@ -407,7 +407,8 @@ int atoi(const string &s);
|
|
407
407
|
long atol(const string &s);
|
408
408
|
|
409
409
|
/**
|
410
|
-
* Round
|
410
|
+
* Round `number` up to the nearest multiple of `multiple`.
|
411
|
+
* This only works for integers!
|
411
412
|
*/
|
412
413
|
template<typename IntegerType>
|
413
414
|
IntegerType
|
@@ -427,6 +428,35 @@ bool constantTimeCompare(const StaticString &a, const StaticString &b);
|
|
427
428
|
|
428
429
|
string distanceOfTimeInWords(time_t fromTime, time_t toTime = 0);
|
429
430
|
|
431
|
+
/**
|
432
|
+
* Returns the amount of time to the next multiple of `multiple`. For example:
|
433
|
+
*
|
434
|
+
* timeToNextMultipleULL(5, 0); // => 5
|
435
|
+
* timeToNextMultipleULL(5, 1); // => 4
|
436
|
+
* timeToNextMultipleULL(5, 2); // => 3
|
437
|
+
* timeToNextMultipleULL(5, 3); // => 2
|
438
|
+
* timeToNextMultipleULL(5, 4); // => 1
|
439
|
+
* timeToNextMultipleULL(5, 5); // => 5
|
440
|
+
* timeToNextMultipleULL(5, 6); // => 4
|
441
|
+
*
|
442
|
+
* `multiple` and `now` may be in any unit (seconds, microseconds, hours) as
|
443
|
+
* long as they are both the same unit. The return value is then also in that unit.
|
444
|
+
* `timeToNextMultipleULL` operates on timestamp integers while
|
445
|
+
* `timeToNextMultipleD` operates on timestamp floating point numbers.
|
446
|
+
*
|
447
|
+
* In case of `timeToNextMultipleULL`, if `now` is 0, then it is automatically set to
|
448
|
+
* `SystemTime::getUsec()`.
|
449
|
+
*
|
450
|
+
* This function is mainly useful for repeating a timer while aligning the repeat
|
451
|
+
* time on a certain multiple, which saves power on laptops. For example, when
|
452
|
+
* repeating a libev timer you can call the following in the timeout function:
|
453
|
+
*
|
454
|
+
* timer->repeat = timeToNextMultipleD(5, ev_now(loop));
|
455
|
+
* ev_timer_again(loop, timer);
|
456
|
+
*/
|
457
|
+
unsigned long long timeToNextMultipleULL(unsigned long long multiple, unsigned long long now = 0);
|
458
|
+
double timeToNextMultipleD(unsigned int multiple, double now);
|
459
|
+
|
430
460
|
/**
|
431
461
|
* Append the given data to the address at 'pos', but do not cross 'end'.
|
432
462
|
* Returns the end of the appended string.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2016 Phusion Holding B.V.
|
4
4
|
*
|
5
5
|
* "Passenger", "Phusion Passenger" and "Union Station" are registered
|
6
6
|
* trademarks of Phusion Holding B.V.
|
@@ -201,6 +201,11 @@ public:
|
|
201
201
|
return *this;
|
202
202
|
}
|
203
203
|
|
204
|
+
VariantMap &setUint(const string &name, unsigned int value) {
|
205
|
+
set(name, toString(value));
|
206
|
+
return *this;
|
207
|
+
}
|
208
|
+
|
204
209
|
VariantMap &setDefaultInt(const string &name, int value) {
|
205
210
|
if (store.find(name) == store.end()) {
|
206
211
|
store[name] = toString(value);
|
@@ -235,7 +235,7 @@ private:
|
|
235
235
|
}
|
236
236
|
}
|
237
237
|
|
238
|
-
void throwEnrichedWatchdogFailReason(const string &simpleReason) {
|
238
|
+
void throwEnrichedWatchdogFailReason(const ResourceLocator &locator, const string &simpleReason) {
|
239
239
|
if (mIntegrationMode == IM_STANDALONE) {
|
240
240
|
throw RuntimeException("Unable to start " PROGRAM_NAME ": " + simpleReason +
|
241
241
|
". This probably means that your " SHORT_PROGRAM_NAME
|
@@ -243,6 +243,7 @@ private:
|
|
243
243
|
} else {
|
244
244
|
string passengerRootConfig;
|
245
245
|
string docURL;
|
246
|
+
|
246
247
|
if (mIntegrationMode == IM_APACHE) {
|
247
248
|
passengerRootConfig = "PassengerRoot";
|
248
249
|
docURL = "https://www.phusionpassenger.com/library/config/apache/reference/#passengerroot";
|
@@ -250,11 +251,19 @@ private:
|
|
250
251
|
passengerRootConfig = "passenger_root";
|
251
252
|
docURL = "https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_root";
|
252
253
|
}
|
253
|
-
|
254
|
-
|
255
|
-
"
|
256
|
-
"' setting
|
257
|
-
|
254
|
+
|
255
|
+
string message = "Unable to start " PROGRAM_NAME ": " + simpleReason +
|
256
|
+
". There may be different causes for this:\n\n"
|
257
|
+
" - Your '" + passengerRootConfig + "' setting is set to the wrong value."
|
258
|
+
" Please see " + docURL + " to learn how to fix the value.\n";
|
259
|
+
if (!locator.getBuildSystemDir().empty()) {
|
260
|
+
message.append(" - The " AGENT_EXE " binary is not compiled."
|
261
|
+
" Please run this command to compile it: "
|
262
|
+
+ locator.getBinDir() + "/passenger-config compile-agent\n");
|
263
|
+
}
|
264
|
+
message.append(" - Your " SHORT_PROGRAM_NAME " installation is broken or incomplete."
|
265
|
+
" Please reinstall " SHORT_PROGRAM_NAME ".");
|
266
|
+
throw RuntimeException(message);
|
258
267
|
}
|
259
268
|
}
|
260
269
|
|
@@ -344,8 +353,7 @@ public:
|
|
344
353
|
try {
|
345
354
|
agentFilename = locator.findSupportBinary(AGENT_EXE);
|
346
355
|
} catch (const Passenger::RuntimeException &e) {
|
347
|
-
|
348
|
-
throwEnrichedWatchdogFailReason(locatorError);
|
356
|
+
throwEnrichedWatchdogFailReason(locator, e.what());
|
349
357
|
}
|
350
358
|
SocketPair fds;
|
351
359
|
int e;
|
@@ -508,7 +516,7 @@ public:
|
|
508
516
|
killProcessGroupAndWait(&pid, 5000);
|
509
517
|
guard.clear();
|
510
518
|
if (e == ENOENT) {
|
511
|
-
throwEnrichedWatchdogFailReason("Executable " + agentFilename + " found.");
|
519
|
+
throwEnrichedWatchdogFailReason(locator, "Executable " + agentFilename + " not found.");
|
512
520
|
} else {
|
513
521
|
throw SystemException("Unable to start the " PROGRAM_NAME " watchdog (" +
|
514
522
|
agentFilename + ")", e);
|
@@ -197,3 +197,46 @@ Daryl Haresign <github@daryl.haresign.com>
|
|
197
197
|
Rui Abreu Ferreira <raf-ep@gmx.com>
|
198
198
|
João Reis <reis@janeasystems.com>
|
199
199
|
farblue68 <farblue68@gmail.com>
|
200
|
+
Jason Williams <necmon@yahoo.com>
|
201
|
+
Igor Soarez <igorsoarez@gmail.com>
|
202
|
+
Miodrag Milanovic <mmicko@gmail.com>
|
203
|
+
Cheng Zhao <zcbenz@gmail.com>
|
204
|
+
Michael Neumann <mneumann@think.localnet>
|
205
|
+
Stefano Cristiano <stefanocristiano82@gmail.com>
|
206
|
+
heshamsafi <hesham.safi.eldeen@gmail.com>
|
207
|
+
A. Hauptmann <andreashauptmann@t-online.de>
|
208
|
+
John McNamee <jpm@microwiz.com>
|
209
|
+
Yosuke Furukawa <yosuke.furukawa@gmail.com>
|
210
|
+
Santiago Gimeno <santiago.gimeno@quantion.es>
|
211
|
+
guworks <ground.up.works@gmail.com>
|
212
|
+
RossBencina <rossb@audiomulch.com>
|
213
|
+
Roger A. Light <roger@atchoo.org>
|
214
|
+
chenttuuvv <chenttuuvv@yahoo.com>
|
215
|
+
Richard Lau <riclau@uk.ibm.com>
|
216
|
+
ronkorving <rkorving@wizcorp.jp>
|
217
|
+
Corbin Simpson <MostAwesomeDude@gmail.com>
|
218
|
+
Zachary Hamm <zsh@imipolexg.org>
|
219
|
+
Karl Skomski <karl@skomski.com>
|
220
|
+
Jeremy Whitlock <jwhitlock@apache.org>
|
221
|
+
Willem Thiart <himself@willemthiart.com>
|
222
|
+
Ben Trask <bentrask@comcast.net>
|
223
|
+
Jianghua Yang <jianghua.yjh@alibaba-inc.com>
|
224
|
+
Colin Snover <github.com@zetafleet.com>
|
225
|
+
Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
|
226
|
+
Eli Skeggs <skeggse@gmail.com>
|
227
|
+
nmushell <nmushell@bloomberg.net>
|
228
|
+
Gireesh Punathil <gpunathi@in.ibm.com>
|
229
|
+
Ryan Johnston <ryan@mediapixel.co.nz>
|
230
|
+
Adam Stylinski <stylinae@mail.uc.edu>
|
231
|
+
Nathan Corvino <nathan@corvino.com>
|
232
|
+
Wink Saville <wink@saville.com>
|
233
|
+
Angel Leon <gubatron@gmail.com>
|
234
|
+
Louis DeJardin <lodejard@microsoft.com>
|
235
|
+
Imran Iqbal <imrani@ca.ibm.com>
|
236
|
+
Petka Antonov <petka_antonov@hotmail.com>
|
237
|
+
Ian Kronquist <iankronquist@teleport.com>
|
238
|
+
kkdaemon <kkdaemon@gmail.com>
|
239
|
+
Yuval Brik <yuval@brik.org.il>
|
240
|
+
Joran Dirk Greef <joran@ronomon.com>
|
241
|
+
Andrey Mazo <andrey.mazo@fidelissecurity.com>
|
242
|
+
sztomi <hello.sztomi@gmail.com>
|
@@ -1,4 +1,353 @@
|
|
1
|
-
2015.
|
1
|
+
2015.12.15, Version 1.8.0 (Stable)
|
2
|
+
|
3
|
+
Changes since version 1.7.5:
|
4
|
+
|
5
|
+
* unix: fix memory leak in uv_interface_addresses (Jianghua Yang)
|
6
|
+
|
7
|
+
* unix: make uv_guess_handle work properly for AIX (Gireesh Punathil)
|
8
|
+
|
9
|
+
* fs: undo uv__req_init when uv__malloc failed (Jianghua Yang)
|
10
|
+
|
11
|
+
* build: remove unused 'component' GYP option (Saúl Ibarra Corretgé)
|
12
|
+
|
13
|
+
* include: remove duplicate extern declaration (Jianghua Yang)
|
14
|
+
|
15
|
+
* win: use the MSVC provided snprintf where possible (Jason Williams)
|
16
|
+
|
17
|
+
* win, test: fix compilation warning (Saúl Ibarra Corretgé)
|
18
|
+
|
19
|
+
* win: fix compilation with VS < 2012 (Ryan Johnston)
|
20
|
+
|
21
|
+
* stream: support empty uv_try_write on unix (Fedor Indutny)
|
22
|
+
|
23
|
+
* unix: fix request handle leak in uv__udp_send (Jianghua Yang)
|
24
|
+
|
25
|
+
* src: replace QUEUE_SPLIT with QUEUE_MOVE (Ben Noordhuis)
|
26
|
+
|
27
|
+
* unix: use QUEUE_MOVE when iterating over lists (Ben Noordhuis)
|
28
|
+
|
29
|
+
* unix: squelch harmless valgrind warning (Ben Noordhuis)
|
30
|
+
|
31
|
+
* test: don't abort on setrlimit() failure (Ben Noordhuis)
|
32
|
+
|
33
|
+
* unix: only undo fs req registration in async mode (Ben Noordhuis)
|
34
|
+
|
35
|
+
* unix: fix uv__getiovmax return value (HungMingWu)
|
36
|
+
|
37
|
+
* unix: make work with Solaris Studio. (Adam Stylinski)
|
38
|
+
|
39
|
+
* test: fix fs_event_watch_file_currentdir flakiness (Santiago Gimeno)
|
40
|
+
|
41
|
+
* unix: skip prohibited syscalls on tvOS and watchOS (Nathan Corvino)
|
42
|
+
|
43
|
+
* test: use FQDN in getaddrinfo_fail test (Wink Saville)
|
44
|
+
|
45
|
+
* docs: clarify documentation of uv_tcp_init_ex (Andrius Bentkus)
|
46
|
+
|
47
|
+
* win: fix comment (Miodrag Milanovic)
|
48
|
+
|
49
|
+
* doc: fix typo in README (Angel Leon)
|
50
|
+
|
51
|
+
* darwin: abort() if (un)locking fs mutex fails (Ben Noordhuis)
|
52
|
+
|
53
|
+
* pipe: enable inprocess uv_write2 on Windows (Louis DeJardin)
|
54
|
+
|
55
|
+
* win: properly return UV_EBADF when _close() fails (Nicholas Vavilov)
|
56
|
+
|
57
|
+
* test: skip process_title for AIX (Imran Iqbal)
|
58
|
+
|
59
|
+
* misc: expose handle print APIs (Petka Antonov)
|
60
|
+
|
61
|
+
* include: add stdio.h to uv.h (Saúl Ibarra Corretgé)
|
62
|
+
|
63
|
+
* misc: remove unnecessary null pointer checks (Ian Kronquist)
|
64
|
+
|
65
|
+
* test,freebsd: skip udp_dual_stack if not supported (Santiago Gimeno)
|
66
|
+
|
67
|
+
* linux: don't retry dup2/dup3 on EINTR (Ben Noordhuis)
|
68
|
+
|
69
|
+
* unix: don't retry dup2/dup3 on EINTR (Ben Noordhuis)
|
70
|
+
|
71
|
+
* test: fix -Wtautological-pointer-compare warnings (Saúl Ibarra Corretgé)
|
72
|
+
|
73
|
+
* win: map ERROR_BAD_PATHNAME to UV_ENOENT (Tony Kelman)
|
74
|
+
|
75
|
+
* test: fix test/test-tty.c for AIX (Imran Iqbal)
|
76
|
+
|
77
|
+
* android: support api level less than 21 (kkdaemon)
|
78
|
+
|
79
|
+
* fsevents: fix race on simultaneous init+close (Fedor Indutny)
|
80
|
+
|
81
|
+
* linux,fs: fix p{read,write}v with a 64bit offset (Saúl Ibarra Corretgé)
|
82
|
+
|
83
|
+
* fs: add uv_fs_realpath() (Yuval Brik)
|
84
|
+
|
85
|
+
* win: fix path for removed and renamed fs events (Joran Dirk Greef)
|
86
|
+
|
87
|
+
* win: do not read more from stream than available (Jeremy Whitlock)
|
88
|
+
|
89
|
+
* test: test that uv_close() doesn't corrupt QUEUE (Andrey Mazo)
|
90
|
+
|
91
|
+
* unix: fix uv_fs_event_stop() from fs_event_cb (Andrey Mazo)
|
92
|
+
|
93
|
+
* test: fix self-deadlocks in thread_rwlock_trylock (Ben Noordhuis)
|
94
|
+
|
95
|
+
* src: remove non ascii character (sztomi)
|
96
|
+
|
97
|
+
* test: fix test udp_multicast_join6 for AIX (Imran Iqbal)
|
98
|
+
|
99
|
+
|
100
|
+
2015.09.23, Version 1.7.5 (Stable), a8c1136de2cabf25b143021488cbaab05834daa8
|
101
|
+
|
102
|
+
Changes since version 1.7.4:
|
103
|
+
|
104
|
+
* unix: Support atomic compare & swap xlC on AIX (nmushell)
|
105
|
+
|
106
|
+
* unix: Fix including uv-aix.h on AIX (nmushell)
|
107
|
+
|
108
|
+
* unix: consolidate rwlock tryrdlock trywrlock errors (Saúl Ibarra Corretgé)
|
109
|
+
|
110
|
+
* unix, win: consolidate mutex trylock errors (Saúl Ibarra Corretgé)
|
111
|
+
|
112
|
+
* darwin: fix memory leak in uv_cpu_info (Jianghua Yang)
|
113
|
+
|
114
|
+
* test: add tests for the uv_rwlock implementation (Bert Belder)
|
115
|
+
|
116
|
+
* win: redo/fix the uv_rwlock APIs (Bert Belder)
|
117
|
+
|
118
|
+
* win: don't fetch function pointers to SRWLock APIs (Bert Belder)
|
119
|
+
|
120
|
+
|
121
|
+
2015.09.12, Version 1.7.4 (Stable), a7ad4f52189d89cfcba35f78bfc5ff3b1f4105c4
|
122
|
+
|
123
|
+
Changes since version 1.7.3:
|
124
|
+
|
125
|
+
* doc: uv_read_start and uv_read_cb clarifications (Ben Trask)
|
126
|
+
|
127
|
+
* freebsd: obtain true uptime through clock_gettime() (Jianghua Yang)
|
128
|
+
|
129
|
+
* win, tty: do not convert \r to \r\n (Colin Snover)
|
130
|
+
|
131
|
+
* build,gyp: add DragonFly to the list of OSes (Michael Neumann)
|
132
|
+
|
133
|
+
* fs: fix bug in sendfile for DragonFly (Michael Neumann)
|
134
|
+
|
135
|
+
* doc: add uv_dlsym() return type (Brian White)
|
136
|
+
|
137
|
+
* tests: fix fs tests run w/o full getdents support (Jeremy Whitlock)
|
138
|
+
|
139
|
+
* doc: fix typo (Devchandra Meetei Leishangthem)
|
140
|
+
|
141
|
+
* doc: fix uv-unix.h location (Sakthipriyan Vairamani)
|
142
|
+
|
143
|
+
* unix: fix error check when closing process pipe fd (Ben Noordhuis)
|
144
|
+
|
145
|
+
* test,freebsd: fix ipc_listen_xx_write tests (Santiago Gimeno)
|
146
|
+
|
147
|
+
* win: fix unsavory rwlock fallback implementation (Bert Belder)
|
148
|
+
|
149
|
+
* doc: clarify repeat timer behavior (Eli Skeggs)
|
150
|
+
|
151
|
+
|
152
|
+
2015.08.28, Version 1.7.3 (Stable), 93877b11c8b86e0a6befcda83a54555c1e36e4f0
|
153
|
+
|
154
|
+
Changes since version 1.7.2:
|
155
|
+
|
156
|
+
* threadpool: fix thread starvation bug (Ben Noordhuis)
|
157
|
+
|
158
|
+
|
159
|
+
2015.08.25, Version 1.7.2 (Stable), 4d13a013fcfa72311f0102751fdc7951873f466c
|
160
|
+
|
161
|
+
Changes since version 1.7.1:
|
162
|
+
|
163
|
+
* unix, win: make uv_loop_init return on error (Willem Thiart)
|
164
|
+
|
165
|
+
* win: reset pipe handle for pipe servers (Saúl Ibarra Corretgé)
|
166
|
+
|
167
|
+
* win: fix replacing pipe handle for pipe servers (Saúl Ibarra Corretgé)
|
168
|
+
|
169
|
+
* win: fix setting pipe pending instances after bind (Saúl Ibarra Corretgé)
|
170
|
+
|
171
|
+
|
172
|
+
2015.08.20, Version 1.7.1 (Stable), 44f4b6bd82d8ae4583ccc4768a83af778ef69f85
|
173
|
+
|
174
|
+
Changes since version 1.7.0:
|
175
|
+
|
176
|
+
* doc: document the procedure for verifying releases (Saúl Ibarra Corretgé)
|
177
|
+
|
178
|
+
* doc: add note about Windows binaries to the README (Saúl Ibarra Corretgé)
|
179
|
+
|
180
|
+
* doc: use long GPG IDs in MAINTAINERS.md (Saúl Ibarra Corretgé)
|
181
|
+
|
182
|
+
* Revert "stream: squelch ECONNRESET error if already closed" (Saúl Ibarra
|
183
|
+
Corretgé)
|
184
|
+
|
185
|
+
* doc: clarify uv_read_stop() is idempotent (Corbin Simpson)
|
186
|
+
|
187
|
+
* unix: OpenBSD's setsockopt needs an unsigned char for multicast (Zachary
|
188
|
+
Hamm)
|
189
|
+
|
190
|
+
* test: Fix two memory leaks (Karl Skomski)
|
191
|
+
|
192
|
+
* unix,win: return EINVAL on nullptr args in uv_fs_{read,write} (Karl Skomski)
|
193
|
+
|
194
|
+
* win: set accepted TCP sockets as non-inheritable (Saúl Ibarra Corretgé)
|
195
|
+
|
196
|
+
* unix: remove superfluous parentheses in fs macros (Ben Noordhuis)
|
197
|
+
|
198
|
+
* unix: don't copy arguments for sync fs requests (Ben Noordhuis)
|
199
|
+
|
200
|
+
* test: plug small memory leak in unix test runner (Ben Noordhuis)
|
201
|
+
|
202
|
+
* unix,windows: allow NULL loop for sync fs requests (Ben Noordhuis)
|
203
|
+
|
204
|
+
* unix,windows: don't assert on unknown error code (Ben Noordhuis)
|
205
|
+
|
206
|
+
* stream: retry write on EPROTOTYPE on OSX (Brian White)
|
207
|
+
|
208
|
+
* common: fix use of snprintf on Windows (Saúl Ibarra Corretgé)
|
209
|
+
|
210
|
+
* tests: refactored fs watch_dir tests for stability (Jeremy Whitlock)
|
211
|
+
|
212
|
+
|
213
|
+
2015.08.06, Version 1.7.0 (Stable), 415a865d6365ba58d02b92b89d46ba5d7744ec8b
|
214
|
+
|
215
|
+
Changes since version 1.6.1:
|
216
|
+
|
217
|
+
* win,stream: add slot to remember CRT fd (Bert Belder)
|
218
|
+
|
219
|
+
* win,pipe: properly close when created from CRT fd (Bert Belder)
|
220
|
+
|
221
|
+
* win,pipe: don't close fd 0-2 (Bert Belder)
|
222
|
+
|
223
|
+
* win,tty: convert fd -> handle safely (Bert Belder)
|
224
|
+
|
225
|
+
* win,tty: properly close when created from CRT fd (Bert Belder)
|
226
|
+
|
227
|
+
* win,tty: don't close fd 0-2 (Bert Belder)
|
228
|
+
|
229
|
+
* win,fs: don't close fd 0-2 (Bert Belder)
|
230
|
+
|
231
|
+
* win: include "malloc.h" (Cheng Zhao)
|
232
|
+
|
233
|
+
* windows: MSVC 2015 has C99 inline (Jason Williams)
|
234
|
+
|
235
|
+
* dragonflybsd: fixes for nonblocking and cloexec (Michael Neumann)
|
236
|
+
|
237
|
+
* dragonflybsd: use sendfile(2) for uv_fs_sendfile (Michael Neumann)
|
238
|
+
|
239
|
+
* dragonflybsd: fix uv_exepath (Michael Neumann)
|
240
|
+
|
241
|
+
* win,fs: Fixes align(8) directive on mingw (Stefano Cristiano)
|
242
|
+
|
243
|
+
* unix, win: prevent replacing fd in uv_{udp,tcp,pipe}_t (Saúl Ibarra Corretgé)
|
244
|
+
|
245
|
+
* win: move logic to set socket non-inheritable to uv_tcp_set_socket (Saúl
|
246
|
+
Ibarra Corretgé)
|
247
|
+
|
248
|
+
* unix, win: add ability to create tcp/udp sockets early (Saúl Ibarra Corretgé)
|
249
|
+
|
250
|
+
* test: retry select() on EINTR, honor milliseconds (Ben Noordhuis)
|
251
|
+
|
252
|
+
* unix: consolidate tcp and udp bind error (Saúl Ibarra Corretgé)
|
253
|
+
|
254
|
+
* test: conditionally skip udp_ipv6_multicast_join6 (heshamsafi)
|
255
|
+
|
256
|
+
* core: add UV_VERSION_HEX macro (Saúl Ibarra Corretgé)
|
257
|
+
|
258
|
+
* doc: add section with version-checking macros and functions (Saúl Ibarra
|
259
|
+
Corretgé)
|
260
|
+
|
261
|
+
* tty: cleanup handle if uv_tty_init fails (Saúl Ibarra Corretgé)
|
262
|
+
|
263
|
+
* darwin: save a fd when FSEvents is used (Saúl Ibarra Corretgé)
|
264
|
+
|
265
|
+
* win: fix returning thread id in uv_thread_self (Saúl Ibarra Corretgé)
|
266
|
+
|
267
|
+
* common: use offsetof for QUEUE_DATA (Saúl Ibarra Corretgé)
|
268
|
+
|
269
|
+
* win: remove UV_HANDLE_CONNECTED (A. Hauptmann)
|
270
|
+
|
271
|
+
* docs: add Windows specific note for uv_fs_open (Saúl Ibarra Corretgé)
|
272
|
+
|
273
|
+
* doc: add note about uv_fs_scandir (Saúl Ibarra Corretgé)
|
274
|
+
|
275
|
+
* test,unix: reduce stack size of watchdog threads (Ben Noordhuis)
|
276
|
+
|
277
|
+
* win: add support for recursive file watching (Saúl Ibarra Corretgé)
|
278
|
+
|
279
|
+
* win,tty: support consoles with non-default colors (John McNamee)
|
280
|
+
|
281
|
+
* doc: add missing variable name (Yosuke Furukawa)
|
282
|
+
|
283
|
+
* stream: squelch ECONNRESET error if already closed (Santiago Gimeno)
|
284
|
+
|
285
|
+
* build: remove ancient condition from common.gypi (Saúl Ibarra Corretgé)
|
286
|
+
|
287
|
+
* tests: skip some tests when network is unreachable (Luca Bruno)
|
288
|
+
|
289
|
+
* build: proper support for android cross compilation (guworks)
|
290
|
+
|
291
|
+
* android: add missing include to pthread-fixes.c (RossBencina)
|
292
|
+
|
293
|
+
* test: fix compilation warning (Saúl Ibarra Corretgé)
|
294
|
+
|
295
|
+
* doc: add a note about uv_dirent_t.type (Saúl Ibarra Corretgé)
|
296
|
+
|
297
|
+
* win,test: fix shared library build (Saúl Ibarra Corretgé)
|
298
|
+
|
299
|
+
* test: fix compilation warning (Santiago Gimeno)
|
300
|
+
|
301
|
+
* build: add experimental Windows installer (Roger A. Light)
|
302
|
+
|
303
|
+
* threadpool: send signal only when queue is empty (chenttuuvv)
|
304
|
+
|
305
|
+
* aix: fix uv_exepath with relative paths (Richard Lau)
|
306
|
+
|
307
|
+
* build: fix version syntax in AppVeyor file (Saúl Ibarra Corretgé)
|
308
|
+
|
309
|
+
* unix: allow nbufs > IOV_MAX in uv_fs_{read,write} (ronkorving)
|
310
|
+
|
311
|
+
|
312
|
+
2015.06.06, Version 1.6.1 (Stable), 30c8be07bb78a66fdee5141626bf53a49a17094a
|
313
|
+
|
314
|
+
Changes since version 1.6.0:
|
315
|
+
|
316
|
+
* unix: handle invalid _SC_GETPW_R_SIZE_MAX values (cjihrig)
|
317
|
+
|
318
|
+
|
319
|
+
2015.06.04, Version 1.6.0 (Stable), adfccad76456061dfcf79b8df8e7dbfee51791d7
|
320
|
+
|
321
|
+
Changes since version 1.5.0:
|
322
|
+
|
323
|
+
* aix: fix setsockopt for multicast options (Michael)
|
324
|
+
|
325
|
+
* unix: don't block for io if any io handle is primed (Saúl Ibarra Corretgé)
|
326
|
+
|
327
|
+
* windows: MSVC 2015 has snprintf() (Rui Abreu Ferreira)
|
328
|
+
|
329
|
+
* windows: Add VS2015 support to vcbuild.bat (Jason Williams)
|
330
|
+
|
331
|
+
* doc: fix typo in tcp.rst (Igor Soarez)
|
332
|
+
|
333
|
+
* linux: work around epoll bug in kernels < 2.6.37 (Ben Noordhuis)
|
334
|
+
|
335
|
+
* unix,win: add uv_os_homedir() (cjihrig)
|
336
|
+
|
337
|
+
* stream: fix `select()` race condition (Fedor Indutny)
|
338
|
+
|
339
|
+
* unix: prevent infinite loop in uv__run_pending (Saúl Ibarra Corretgé)
|
340
|
+
|
341
|
+
* unix: make sure UDP send callbacks are asynchronous (Saúl Ibarra Corretgé)
|
342
|
+
|
343
|
+
* test: fix `platform_output` netmask printing. (Andrew Paprocki)
|
344
|
+
|
345
|
+
* aix: add ahafs autoconf detection and README notes (Andrew Paprocki)
|
346
|
+
|
347
|
+
* core: add ability to customize memory allocator (Saúl Ibarra Corretgé)
|
348
|
+
|
349
|
+
|
350
|
+
2015.05.07, Version 1.5.0 (Stable), 4e77f74c7b95b639b3397095db1bc5bcc016c203
|
2
351
|
|
3
352
|
Changes since version 1.4.2:
|
4
353
|
|