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.

Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +20 -0
  3. data/CONTRIBUTORS +1 -0
  4. data/build/cxx_dependency_map.rb +7338 -7104
  5. data/build/cxx_tests.rb +3 -3
  6. data/build/misc.rb +1 -0
  7. data/dev/index_cxx_dependencies.rb +3 -2
  8. data/resources/templates/standalone/config.erb +1 -1
  9. data/resources/templates/standalone/http.erb +1 -0
  10. data/resources/templates/standalone/server.erb +1 -0
  11. data/src/agent/Core/ApplicationPool/AbstractSession.h +83 -0
  12. data/src/agent/Core/ApplicationPool/Common.h +6 -4
  13. data/src/agent/Core/ApplicationPool/Options.h +4 -1
  14. data/src/agent/Core/ApplicationPool/Pool.h +2 -2
  15. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +3 -6
  16. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +3 -3
  17. data/src/agent/Core/ApplicationPool/Session.h +15 -27
  18. data/src/agent/Core/ApplicationPool/TestSession.h +188 -0
  19. data/src/agent/Core/Controller.h +15 -6
  20. data/src/agent/Core/Controller/CheckoutSession.cpp +13 -5
  21. data/src/agent/Core/Controller/ForwardResponse.cpp +20 -2
  22. data/src/agent/Core/Controller/Hooks.cpp +15 -2
  23. data/src/agent/Core/Controller/InitRequest.cpp +5 -1
  24. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
  25. data/src/agent/Core/Controller/Request.h +11 -4
  26. data/src/agent/Core/Controller/SendRequest.cpp +34 -13
  27. data/src/agent/Core/Controller/StateInspectionAndConfiguration.cpp +2 -2
  28. data/src/agent/Core/CoreMain.cpp +27 -1
  29. data/src/agent/Core/OptionParser.h +11 -1
  30. data/src/agent/Core/SpawningKit/DirectSpawner.h +1 -0
  31. data/src/agent/Core/SpawningKit/SmartSpawner.h +1 -0
  32. data/src/agent/Core/SpawningKit/Spawner.h +21 -1
  33. data/src/agent/SpawnPreparer/SpawnPreparerMain.cpp +1 -1
  34. data/src/agent/UstRouter/OptionParser.h +7 -1
  35. data/src/agent/UstRouter/UstRouterMain.cpp +27 -1
  36. data/src/cxx_supportlib/Algorithms/MovingAverage.h +223 -0
  37. data/src/cxx_supportlib/Constants.h +2 -2
  38. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +96 -40
  39. data/src/cxx_supportlib/ResourceLocator.h +33 -14
  40. data/src/cxx_supportlib/ServerKit/Channel.h +198 -69
  41. data/src/cxx_supportlib/ServerKit/Errors.h +6 -1
  42. data/src/cxx_supportlib/ServerKit/HttpRequest.h +20 -1
  43. data/src/cxx_supportlib/ServerKit/HttpServer.h +124 -32
  44. data/src/cxx_supportlib/ServerKit/Server.h +65 -1
  45. data/src/cxx_supportlib/Utils/IOUtils.cpp +12 -22
  46. data/src/cxx_supportlib/Utils/JsonUtils.h +87 -1
  47. data/src/cxx_supportlib/Utils/StrIntUtils.cpp +16 -1
  48. data/src/cxx_supportlib/Utils/StrIntUtils.h +31 -1
  49. data/src/cxx_supportlib/Utils/VariantMap.h +6 -1
  50. data/src/cxx_supportlib/WatchdogLauncher.h +17 -9
  51. data/src/cxx_supportlib/vendor-copy/libuv/AUTHORS +43 -0
  52. data/src/cxx_supportlib/vendor-copy/libuv/ChangeLog +350 -1
  53. data/src/cxx_supportlib/vendor-copy/libuv/Makefile.am +9 -1
  54. data/src/cxx_supportlib/vendor-copy/libuv/README.md +48 -0
  55. data/src/cxx_supportlib/vendor-copy/libuv/checksparse.sh +1 -0
  56. data/src/cxx_supportlib/vendor-copy/libuv/common.gypi +5 -5
  57. data/src/cxx_supportlib/vendor-copy/libuv/configure.ac +2 -1
  58. data/src/cxx_supportlib/vendor-copy/libuv/gyp_uv.py +0 -3
  59. data/src/cxx_supportlib/vendor-copy/libuv/include/uv-version.h +5 -1
  60. data/src/cxx_supportlib/vendor-copy/libuv/include/uv.h +30 -3
  61. data/src/cxx_supportlib/vendor-copy/libuv/src/fs-poll.c +3 -3
  62. data/src/cxx_supportlib/vendor-copy/libuv/src/inet.c +0 -4
  63. data/src/cxx_supportlib/vendor-copy/libuv/src/queue.h +17 -1
  64. data/src/cxx_supportlib/vendor-copy/libuv/src/threadpool.c +10 -10
  65. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/aix.c +84 -166
  66. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/android-ifaddrs.c +11 -11
  67. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/async.c +7 -1
  68. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/atomic-ops.h +17 -0
  69. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/core.c +140 -21
  70. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/darwin.c +15 -11
  71. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/dl.c +4 -7
  72. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/freebsd.c +52 -37
  73. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fs.c +181 -60
  74. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/fsevents.c +39 -34
  75. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/getaddrinfo.c +4 -4
  76. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/internal.h +3 -1
  77. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/kqueue.c +12 -4
  78. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-core.c +38 -15
  79. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-inotify.c +36 -8
  80. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.c +4 -4
  81. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/linux-syscalls.h +2 -2
  82. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop-watcher.c +6 -1
  83. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/loop.c +28 -8
  84. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/netbsd.c +18 -16
  85. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/openbsd.c +18 -16
  86. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pipe.c +3 -3
  87. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/process.c +18 -6
  88. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/proctitle.c +2 -2
  89. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/pthread-fixes.c +1 -0
  90. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/signal.c +2 -0
  91. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/stream.c +47 -30
  92. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/sunos.c +13 -11
  93. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tcp.c +43 -8
  94. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/thread.c +21 -15
  95. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/tty.c +16 -2
  96. data/src/cxx_supportlib/vendor-copy/libuv/src/unix/udp.c +54 -14
  97. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.c +104 -21
  98. data/src/cxx_supportlib/vendor-copy/libuv/src/uv-common.h +14 -1
  99. data/src/cxx_supportlib/vendor-copy/libuv/src/version.c +1 -5
  100. data/src/cxx_supportlib/vendor-copy/libuv/uv.gyp +22 -1
  101. data/src/nginx_module/CacheLocationConfig.c +52 -0
  102. data/src/nginx_module/CacheLocationConfig.c.erb +13 -1
  103. data/src/nginx_module/Configuration.c +1 -0
  104. data/src/nginx_module/Configuration.h +1 -0
  105. data/src/nginx_module/ConfigurationCommands.c +20 -0
  106. data/src/nginx_module/ConfigurationFields.h +4 -0
  107. data/src/nginx_module/CreateLocationConfig.c +8 -0
  108. data/src/nginx_module/MergeLocationConfig.c +12 -0
  109. data/src/nginx_module/config +31 -13
  110. data/src/nginx_module/ngx_http_passenger_module.c +4 -0
  111. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  112. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -1
  113. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +11 -1
  114. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +6 -1
  115. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +32 -31
  116. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +13 -2
  117. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +1 -0
  118. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +6 -1
  119. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core.rb +6 -0
  120. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/api.rb +29 -19
  121. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/context.rb +2 -2
  122. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter.rb +2 -3
  123. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/simple_json.rb +2 -1
  124. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/spec_helper.rb +2 -0
  125. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/time_point.rb +3 -17
  126. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/transaction.rb +7 -10
  127. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/utils.rb +11 -9
  128. metadata +5 -2
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2015 Phusion Holding B.V.
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 = 1024;
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-2015 Phusion Holding B.V.
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-2015 Phusion Holding B.V.
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 <em>number</em> up to the nearest multiple of <em>multiple</em>.
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-2015 Phusion Holding B.V.
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
- throw RuntimeException("Unable to start " PROGRAM_NAME ": " + simpleReason +
254
- ". This probably means that your " SHORT_PROGRAM_NAME
255
- " installation is broken or incomplete, or that your '" + passengerRootConfig +
256
- "' setting contains the wrong value. Please reinstall " SHORT_PROGRAM_NAME
257
- " or, or see " + docURL + " to learn how to adjust the setting.");
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
- string locatorError = e.what();
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.05.07, Version 1.5.0 (Stable)
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