passenger 3.0.9 → 3.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- data/NEWS +32 -0
- data/Rakefile +1 -1
- data/build/common_library.rb +6 -1
- data/build/config.rb +3 -1
- data/doc/Users guide Apache.html +120 -39
- data/doc/Users guide Apache.txt +64 -0
- data/doc/Users guide Nginx.html +50 -2
- data/doc/Users guide Nginx.txt +29 -0
- data/ext/apache2/Bucket.cpp +7 -5
- data/ext/apache2/Bucket.h +2 -1
- data/ext/apache2/Configuration.cpp +8 -0
- data/ext/apache2/Configuration.hpp +9 -5
- data/ext/apache2/HelperAgent.cpp +4 -5
- data/ext/apache2/Hooks.cpp +1 -6
- data/ext/boost/thread/exceptions.hpp +7 -1
- data/ext/boost/thread/locks.hpp +11 -11
- data/ext/common/AgentBase.cpp +21 -1
- data/ext/common/AgentsStarter.hpp +22 -21
- data/ext/common/ApplicationPool/Client.h +0 -8
- data/ext/common/ApplicationPool/Server.h +22 -21
- data/ext/common/Constants.h +1 -1
- data/ext/common/EventedMessageServer.h +6 -2
- data/ext/common/IniFile.h +4 -4
- data/ext/common/Logging.h +1 -1
- data/ext/common/LoggingAgent/LoggingServer.h +2 -2
- data/ext/common/LoggingAgent/Main.cpp +2 -2
- data/ext/common/MessageChannel.h +20 -62
- data/ext/common/MessageReadersWriters.h +4 -4
- data/ext/common/MessageServer.h +18 -18
- data/ext/common/Process.h +4 -5
- data/ext/common/Session.h +6 -40
- data/ext/common/SpawnManager.h +20 -25
- data/ext/common/Utils.cpp +1 -1
- data/ext/common/Utils/Dechunker.h +1 -1
- data/ext/common/Utils/MessageIO.h +109 -14
- data/ext/common/Utils/StreamBoyerMooreHorspool.h +20 -14
- data/ext/common/Utils/VariantMap.h +9 -27
- data/ext/common/Watchdog.cpp +53 -42
- data/ext/libev/config.h +122 -0
- data/ext/nginx/Configuration.c +62 -0
- data/ext/nginx/Configuration.h +5 -0
- data/ext/nginx/ContentHandler.c +46 -19
- data/ext/nginx/HelperAgent.cpp +6 -5
- data/ext/nginx/config +12 -12
- data/ext/oxt/system_calls.cpp +10 -1
- data/ext/ruby/extconf.rb +0 -1
- data/ext/ruby/passenger_native_support.c +2 -2
- data/helper-scripts/prespawn +1 -1
- data/lib/phusion_passenger.rb +4 -4
- data/lib/phusion_passenger/classic_rails/application_spawner.rb +2 -2
- data/lib/phusion_passenger/dependencies.rb +6 -1
- data/lib/phusion_passenger/platform_info.rb +9 -0
- data/lib/phusion_passenger/platform_info/compiler.rb +5 -0
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +5 -5
- data/lib/phusion_passenger/rack/application_spawner.rb +6 -3
- data/lib/phusion_passenger/utils.rb +2 -2
- data/lib/phusion_passenger/wsgi/application_spawner.rb +1 -1
- data/resources/mime.types +2 -0
- data/test/cxx/LoggingTest.cpp +10 -12
- data/test/cxx/MessageIOTest.cpp +53 -3
- data/test/cxx/MessageReadersWritersTest.cpp +5 -2
- data/test/cxx/MessageServerTest.cpp +3 -1
- data/test/integration_tests/nginx_tests.rb +14 -1
- data/test/stub/rack/config.ru +2 -0
- data/test/tut/tut.h +9 -3
- metadata +5 -4
@@ -67,7 +67,7 @@
|
|
67
67
|
* information. The section 'Reuse' explains why this is important.
|
68
68
|
*
|
69
69
|
* 2. Allocate a StreamBMH_Occ structure somewhere.
|
70
|
-
* This structure contains the Boyer-Moore-Horspool occurrance table. The
|
70
|
+
* This structure contains the Boyer-Moore-Horspool occurrance table. The section
|
71
71
|
* 'Reuse' explains why this is important.
|
72
72
|
*
|
73
73
|
* 3. Initialize both structures with sbmh_init(). The structures are now usable for
|
@@ -231,8 +231,10 @@ struct StreamBMH {
|
|
231
231
|
|
232
232
|
/***** Internal fields, do not access. *****/
|
233
233
|
sbmh_size_t lookbehind_size;
|
234
|
-
|
235
|
-
|
234
|
+
/* After this field comes a 'lookbehind' field whose size is determined
|
235
|
+
* by the allocator (e.g. SBMH_ALLOC_AND_INIT).
|
236
|
+
* Algorithm uses at most needle_len - 1 bytes of space in lookbehind buffer.
|
237
|
+
*/
|
236
238
|
};
|
237
239
|
|
238
240
|
#define SBMH_SIZE(needle_len) (sizeof(struct StreamBMH) + (needle_len) - 1)
|
@@ -256,6 +258,9 @@ struct StreamBMH {
|
|
256
258
|
#define SBMH_DEBUG2(format, arg1, arg2) do { /* nothing */ } while (false)
|
257
259
|
#endif
|
258
260
|
|
261
|
+
/* Accessor for the lookbehind field. */
|
262
|
+
#define _SBMH_LOOKBEHIND(ctx) ((unsigned char *) ctx + sizeof(struct StreamBMH))
|
263
|
+
|
259
264
|
|
260
265
|
inline void
|
261
266
|
sbmh_reset(struct StreamBMH *restrict ctx) {
|
@@ -300,7 +305,7 @@ sbmh_lookup_char(const struct StreamBMH *restrict ctx,
|
|
300
305
|
const unsigned char *restrict data, ssize_t pos)
|
301
306
|
{
|
302
307
|
if (pos < 0) {
|
303
|
-
return ctx
|
308
|
+
return _SBMH_LOOKBEHIND(ctx)[ctx->lookbehind_size + pos];
|
304
309
|
} else {
|
305
310
|
return data[pos];
|
306
311
|
}
|
@@ -346,10 +351,11 @@ sbmh_feed(struct StreamBMH *restrict ctx, const struct StreamBMH_Occ *restrict o
|
|
346
351
|
ssize_t pos = -ctx->lookbehind_size;
|
347
352
|
unsigned char last_needle_char = needle[needle_len - 1];
|
348
353
|
const sbmh_size_t *occ = occtable->occ;
|
354
|
+
unsigned char *lookbehind = _SBMH_LOOKBEHIND(ctx);
|
349
355
|
|
350
356
|
if (pos < 0) {
|
351
357
|
SBMH_DEBUG2("[sbmh] considering lookbehind: (%s)(%s)\n",
|
352
|
-
std::string((const char *)
|
358
|
+
std::string((const char *) lookbehind, ctx->lookbehind_size).c_str(),
|
353
359
|
std::string((const char *) data, len).c_str());
|
354
360
|
|
355
361
|
/* Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool
|
@@ -374,7 +380,7 @@ sbmh_feed(struct StreamBMH *restrict ctx, const struct StreamBMH_Occ *restrict o
|
|
374
380
|
ctx->found = true;
|
375
381
|
ctx->lookbehind_size = 0;
|
376
382
|
if (pos > -ctx->lookbehind_size && ctx->callback != NULL) {
|
377
|
-
ctx->callback(ctx,
|
383
|
+
ctx->callback(ctx, lookbehind,
|
378
384
|
ctx->lookbehind_size + pos);
|
379
385
|
}
|
380
386
|
SBMH_DEBUG1("[sbmh] found using lookbehind; end = %d\n",
|
@@ -408,7 +414,7 @@ sbmh_feed(struct StreamBMH *restrict ctx, const struct StreamBMH_Occ *restrict o
|
|
408
414
|
/* Discard lookbehind buffer. */
|
409
415
|
SBMH_DEBUG("[sbmh] no match; discarding lookbehind\n");
|
410
416
|
if (ctx->callback != NULL) {
|
411
|
-
ctx->callback(ctx,
|
417
|
+
ctx->callback(ctx, lookbehind, ctx->lookbehind_size);
|
412
418
|
}
|
413
419
|
ctx->lookbehind_size = 0;
|
414
420
|
} else {
|
@@ -420,21 +426,21 @@ sbmh_feed(struct StreamBMH *restrict ctx, const struct StreamBMH_Occ *restrict o
|
|
420
426
|
|
421
427
|
if (bytesToCutOff > 0 && ctx->callback != NULL) {
|
422
428
|
// The cut off data is guaranteed not to contain the needle.
|
423
|
-
ctx->callback(ctx,
|
429
|
+
ctx->callback(ctx, lookbehind, bytesToCutOff);
|
424
430
|
}
|
425
431
|
|
426
|
-
memmove(
|
427
|
-
|
432
|
+
memmove(lookbehind,
|
433
|
+
lookbehind + bytesToCutOff,
|
428
434
|
ctx->lookbehind_size - bytesToCutOff);
|
429
435
|
ctx->lookbehind_size -= bytesToCutOff;
|
430
436
|
|
431
437
|
assert(ssize_t(ctx->lookbehind_size + len) < ssize_t(needle_len));
|
432
|
-
memcpy(
|
438
|
+
memcpy(lookbehind + ctx->lookbehind_size,
|
433
439
|
data, len);
|
434
440
|
ctx->lookbehind_size += len;
|
435
441
|
|
436
442
|
SBMH_DEBUG1("[sbmh] update lookbehind -> (%s)\n",
|
437
|
-
std::string((const char *)
|
443
|
+
std::string((const char *) lookbehind, ctx->lookbehind_size).c_str());
|
438
444
|
return len;
|
439
445
|
}
|
440
446
|
}
|
@@ -484,11 +490,11 @@ sbmh_feed(struct StreamBMH *restrict ctx, const struct StreamBMH_Occ *restrict o
|
|
484
490
|
pos++;
|
485
491
|
}
|
486
492
|
if (size_t(pos) < len) {
|
487
|
-
memcpy(
|
493
|
+
memcpy(lookbehind, data + pos, len - pos);
|
488
494
|
ctx->lookbehind_size = len - pos;
|
489
495
|
SBMH_DEBUG2("[sbmh] adding %d trailing bytes to lookbehind -> (%s)\n",
|
490
496
|
int(len - pos),
|
491
|
-
std::string((const char *)
|
497
|
+
std::string((const char *) lookbehind,
|
492
498
|
ctx->lookbehind_size).c_str());
|
493
499
|
}
|
494
500
|
}
|
@@ -30,9 +30,9 @@
|
|
30
30
|
#include <sys/types.h>
|
31
31
|
#include <map>
|
32
32
|
#include <string>
|
33
|
-
#include
|
34
|
-
#include
|
35
|
-
#include
|
33
|
+
#include <Exceptions.h>
|
34
|
+
#include <Utils/StrIntUtils.h>
|
35
|
+
#include <Utils/MessageIO.h>
|
36
36
|
|
37
37
|
namespace Passenger {
|
38
38
|
|
@@ -130,30 +130,17 @@ public:
|
|
130
130
|
}
|
131
131
|
|
132
132
|
/**
|
133
|
-
* Populates a VariantMap from the data in <em>fd</em>.
|
133
|
+
* Populates a VariantMap from the data in <em>fd</em>. MessageIO
|
134
134
|
* is used to read from the file descriptor.
|
135
135
|
*
|
136
136
|
* @throws SystemException
|
137
137
|
* @throws IOException
|
138
|
-
* @see <tt>readFrom(MessageChannel &)</tt>
|
139
138
|
*/
|
140
139
|
void readFrom(int fd) {
|
141
|
-
MessageChannel channel(fd);
|
142
|
-
readFrom(channel);
|
143
|
-
}
|
144
|
-
|
145
|
-
/**
|
146
|
-
* Populates a VariantMap from the data in <em>channel</em>. The first
|
147
|
-
* message in the channel must be a message as sent by writeToChannel().
|
148
|
-
*
|
149
|
-
* @throws SystemException
|
150
|
-
* @throws IOException
|
151
|
-
*/
|
152
|
-
void readFrom(MessageChannel &channel) {
|
153
140
|
TRACE_POINT();
|
154
141
|
vector<string> args;
|
155
142
|
|
156
|
-
if (!
|
143
|
+
if (!readArrayMessage(fd, args)) {
|
157
144
|
throw IOException("Unexpected end-of-file encountered");
|
158
145
|
}
|
159
146
|
if (args.size() == 0) {
|
@@ -308,19 +295,14 @@ public:
|
|
308
295
|
return store.size();
|
309
296
|
}
|
310
297
|
|
311
|
-
void writeToFd(int fd) const {
|
312
|
-
MessageChannel channel(fd);
|
313
|
-
writeToChannel(channel);
|
314
|
-
}
|
315
|
-
|
316
298
|
/**
|
317
299
|
* Writes a representation of the contents in this VariantMap to
|
318
|
-
* the given
|
319
|
-
* <tt>readFrom(
|
300
|
+
* the given file descriptor with MessageIO. The data can be
|
301
|
+
* unserialized with <tt>readFrom(fd)</tt>.
|
320
302
|
*
|
321
303
|
* @throws SystemException
|
322
304
|
*/
|
323
|
-
void
|
305
|
+
void writeToFd(int fd) const {
|
324
306
|
map<string, string>::const_iterator it;
|
325
307
|
map<string, string>::const_iterator end = store.end();
|
326
308
|
vector<string> args;
|
@@ -331,7 +313,7 @@ public:
|
|
331
313
|
args.push_back(it->first);
|
332
314
|
args.push_back(it->second);
|
333
315
|
}
|
334
|
-
|
316
|
+
writeArrayMessage(fd, args);
|
335
317
|
}
|
336
318
|
|
337
319
|
string inspect() const {
|
data/ext/common/Watchdog.cpp
CHANGED
@@ -38,23 +38,23 @@
|
|
38
38
|
#include <cstring>
|
39
39
|
#include <cerrno>
|
40
40
|
|
41
|
-
#include
|
42
|
-
#include
|
43
|
-
#include
|
44
|
-
#include
|
45
|
-
#include
|
46
|
-
#include
|
47
|
-
#include
|
48
|
-
#include
|
49
|
-
#include
|
50
|
-
#include
|
51
|
-
#include
|
52
|
-
#include
|
53
|
-
#include
|
54
|
-
#include
|
55
|
-
#include
|
56
|
-
#include
|
57
|
-
#include
|
41
|
+
#include <Constants.h>
|
42
|
+
#include <AgentBase.h>
|
43
|
+
#include <ServerInstanceDir.h>
|
44
|
+
#include <FileDescriptor.h>
|
45
|
+
#include <Constants.h>
|
46
|
+
#include <RandomGenerator.h>
|
47
|
+
#include <Logging.h>
|
48
|
+
#include <Exceptions.h>
|
49
|
+
#include <StaticString.h>
|
50
|
+
#include <ResourceLocator.h>
|
51
|
+
#include <Utils.h>
|
52
|
+
#include <Utils/Base64.h>
|
53
|
+
#include <Utils/Timer.h>
|
54
|
+
#include <Utils/ScopeGuard.h>
|
55
|
+
#include <Utils/IOUtils.h>
|
56
|
+
#include <Utils/MessageIO.h>
|
57
|
+
#include <Utils/VariantMap.h>
|
58
58
|
|
59
59
|
using namespace std;
|
60
60
|
using namespace boost;
|
@@ -107,9 +107,10 @@ private:
|
|
107
107
|
int status, e;
|
108
108
|
|
109
109
|
while (!this_thread::interruption_requested()) {
|
110
|
-
|
111
|
-
|
112
|
-
|
110
|
+
{
|
111
|
+
lock_guard<boost::mutex> l(lock);
|
112
|
+
pid = this->pid;
|
113
|
+
}
|
113
114
|
|
114
115
|
// Process can be started before the watcher thread is launched.
|
115
116
|
if (pid == 0) {
|
@@ -132,9 +133,10 @@ private:
|
|
132
133
|
e = errno;
|
133
134
|
}
|
134
135
|
|
135
|
-
|
136
|
-
|
137
|
-
|
136
|
+
{
|
137
|
+
lock_guard<boost::mutex> l(lock);
|
138
|
+
this->pid = 0;
|
139
|
+
}
|
138
140
|
|
139
141
|
this_thread::disable_interruption di;
|
140
142
|
this_thread::disable_syscall_interruption dsi;
|
@@ -287,12 +289,12 @@ public:
|
|
287
289
|
}
|
288
290
|
|
289
291
|
/**
|
290
|
-
* Send the started agent process's startup information over the given
|
291
|
-
* to the starter process. May throw arbitrary exceptions.
|
292
|
+
* Send the started agent process's startup information over the given
|
293
|
+
* file descriptor, to the starter process. May throw arbitrary exceptions.
|
292
294
|
*
|
293
295
|
* @pre start() has been called and succeeded.
|
294
296
|
*/
|
295
|
-
virtual void sendStartupInfo(
|
297
|
+
virtual void sendStartupInfo(int fd) = 0;
|
296
298
|
|
297
299
|
/** Returns the name of the agent that this class is watching. */
|
298
300
|
virtual const char *name() const = 0;
|
@@ -332,7 +334,8 @@ public:
|
|
332
334
|
/* Something went wrong, report error through feedback fd. */
|
333
335
|
e = errno;
|
334
336
|
try {
|
335
|
-
|
337
|
+
writeArrayMessage(fds[1],
|
338
|
+
"system error before exec",
|
336
339
|
"dup2() failed",
|
337
340
|
toString(e).c_str(),
|
338
341
|
NULL);
|
@@ -362,8 +365,10 @@ public:
|
|
362
365
|
}
|
363
366
|
e = errno;
|
364
367
|
try {
|
365
|
-
|
366
|
-
|
368
|
+
writeArrayMessage(FEEDBACK_FD,
|
369
|
+
"exec error",
|
370
|
+
toString(e).c_str(),
|
371
|
+
NULL);
|
367
372
|
} catch (...) {
|
368
373
|
fprintf(stderr, "Passenger Watchdog: could not execute %s: %s (%d)\n",
|
369
374
|
exeFilename.c_str(), strerror(e), e);
|
@@ -400,7 +405,7 @@ public:
|
|
400
405
|
|
401
406
|
// Now read its feedback.
|
402
407
|
try {
|
403
|
-
ret =
|
408
|
+
ret = readArrayMessage(feedbackFd, args);
|
404
409
|
} catch (const SystemException &e) {
|
405
410
|
if (e.code() == ECONNRESET) {
|
406
411
|
ret = false;
|
@@ -612,8 +617,9 @@ public:
|
|
612
617
|
messageSocketPassword = randomGenerator->generateByteString(MESSAGE_SERVER_MAX_PASSWORD_SIZE);
|
613
618
|
}
|
614
619
|
|
615
|
-
virtual void sendStartupInfo(
|
616
|
-
|
620
|
+
virtual void sendStartupInfo(int fd) {
|
621
|
+
writeArrayMessage(fd,
|
622
|
+
"HelperAgent info",
|
617
623
|
requestSocketFilename.c_str(),
|
618
624
|
Base64::encode(requestSocketPassword).c_str(),
|
619
625
|
messageSocketFilename.c_str(),
|
@@ -660,8 +666,9 @@ public:
|
|
660
666
|
agentFilename = resourceLocator.getAgentsDir() + "/PassengerLoggingAgent";
|
661
667
|
}
|
662
668
|
|
663
|
-
virtual void sendStartupInfo(
|
664
|
-
|
669
|
+
virtual void sendStartupInfo(int fd) {
|
670
|
+
writeArrayMessage(fd,
|
671
|
+
"LoggingServer info",
|
665
672
|
loggingAgentAddress.c_str(),
|
666
673
|
loggingAgentPassword.c_str(),
|
667
674
|
NULL);
|
@@ -980,7 +987,6 @@ main(int argc, char *argv[]) {
|
|
980
987
|
randomGenerator = new RandomGenerator();
|
981
988
|
errorEvent = new EventFd();
|
982
989
|
|
983
|
-
MessageChannel feedbackChannel(FEEDBACK_FD);
|
984
990
|
serverInstanceDir.reset(new ServerInstanceDir(webServerPid, tempDir));
|
985
991
|
generation = serverInstanceDir->newGeneration(userSwitching, defaultUser,
|
986
992
|
defaultGroup, webServerWorkerUid, webServerWorkerGid);
|
@@ -1012,8 +1018,10 @@ main(int argc, char *argv[]) {
|
|
1012
1018
|
try {
|
1013
1019
|
(*it)->start();
|
1014
1020
|
} catch (const std::exception &e) {
|
1015
|
-
|
1016
|
-
|
1021
|
+
writeArrayMessage(FEEDBACK_FD,
|
1022
|
+
"Watchdog startup error",
|
1023
|
+
e.what(),
|
1024
|
+
NULL);
|
1017
1025
|
forceAllAgentsShutdown(watchers);
|
1018
1026
|
return 1;
|
1019
1027
|
}
|
@@ -1023,24 +1031,27 @@ main(int argc, char *argv[]) {
|
|
1023
1031
|
try {
|
1024
1032
|
(*it)->startWatching();
|
1025
1033
|
} catch (const std::exception &e) {
|
1026
|
-
|
1027
|
-
|
1034
|
+
writeArrayMessage(FEEDBACK_FD,
|
1035
|
+
"Watchdog startup error",
|
1036
|
+
e.what(),
|
1037
|
+
NULL);
|
1028
1038
|
forceAllAgentsShutdown(watchers);
|
1029
1039
|
return 1;
|
1030
1040
|
}
|
1031
1041
|
// Allow other exceptions to propagate and crash the watchdog.
|
1032
1042
|
}
|
1033
1043
|
|
1034
|
-
|
1044
|
+
writeArrayMessage(FEEDBACK_FD,
|
1045
|
+
"Basic startup info",
|
1035
1046
|
serverInstanceDir->getPath().c_str(),
|
1036
1047
|
toString(generation->getNumber()).c_str(),
|
1037
1048
|
NULL);
|
1038
1049
|
|
1039
1050
|
for (it = watchers.begin(); it != watchers.end(); it++) {
|
1040
|
-
(*it)->sendStartupInfo(
|
1051
|
+
(*it)->sendStartupInfo(FEEDBACK_FD);
|
1041
1052
|
}
|
1042
1053
|
|
1043
|
-
|
1054
|
+
writeArrayMessage(FEEDBACK_FD, "All agents started", NULL);
|
1044
1055
|
|
1045
1056
|
this_thread::disable_interruption di;
|
1046
1057
|
this_thread::disable_syscall_interruption dsi;
|
data/ext/libev/config.h
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
/* config.h. Generated from config.h.in by configure. */
|
2
|
+
/* config.h.in. Generated from configure.ac by autoheader. */
|
3
|
+
|
4
|
+
/* Define to 1 if you have the `clock_gettime' function. */
|
5
|
+
/* #undef HAVE_CLOCK_GETTIME */
|
6
|
+
|
7
|
+
/* "use syscall interface for clock_gettime" */
|
8
|
+
/* #undef HAVE_CLOCK_SYSCALL */
|
9
|
+
|
10
|
+
/* Define to 1 if you have the <dlfcn.h> header file. */
|
11
|
+
#define HAVE_DLFCN_H 1
|
12
|
+
|
13
|
+
/* Define to 1 if you have the `epoll_ctl' function. */
|
14
|
+
/* #undef HAVE_EPOLL_CTL */
|
15
|
+
|
16
|
+
/* Define to 1 if you have the `eventfd' function. */
|
17
|
+
/* #undef HAVE_EVENTFD */
|
18
|
+
|
19
|
+
/* Define to 1 if you have the `inotify_init' function. */
|
20
|
+
/* #undef HAVE_INOTIFY_INIT */
|
21
|
+
|
22
|
+
/* Define to 1 if you have the <inttypes.h> header file. */
|
23
|
+
#define HAVE_INTTYPES_H 1
|
24
|
+
|
25
|
+
/* Define to 1 if you have the `kqueue' function. */
|
26
|
+
#define HAVE_KQUEUE 1
|
27
|
+
|
28
|
+
/* Define to 1 if you have the `m' library (-lm). */
|
29
|
+
#define HAVE_LIBM 1
|
30
|
+
|
31
|
+
/* Define to 1 if you have the `rt' library (-lrt). */
|
32
|
+
/* #undef HAVE_LIBRT */
|
33
|
+
|
34
|
+
/* Define to 1 if you have the <memory.h> header file. */
|
35
|
+
#define HAVE_MEMORY_H 1
|
36
|
+
|
37
|
+
/* Define to 1 if you have the `nanosleep' function. */
|
38
|
+
/* #undef HAVE_NANOSLEEP */
|
39
|
+
|
40
|
+
/* Define to 1 if you have the `poll' function. */
|
41
|
+
#define HAVE_POLL 1
|
42
|
+
|
43
|
+
/* Define to 1 if you have the <poll.h> header file. */
|
44
|
+
#define HAVE_POLL_H 1
|
45
|
+
|
46
|
+
/* Define to 1 if you have the `port_create' function. */
|
47
|
+
/* #undef HAVE_PORT_CREATE */
|
48
|
+
|
49
|
+
/* Define to 1 if you have the <port.h> header file. */
|
50
|
+
/* #undef HAVE_PORT_H */
|
51
|
+
|
52
|
+
/* Define to 1 if you have the `select' function. */
|
53
|
+
#define HAVE_SELECT 1
|
54
|
+
|
55
|
+
/* Define to 1 if you have the `signalfd' function. */
|
56
|
+
/* #undef HAVE_SIGNALFD */
|
57
|
+
|
58
|
+
/* Define to 1 if you have the <stdint.h> header file. */
|
59
|
+
#define HAVE_STDINT_H 1
|
60
|
+
|
61
|
+
/* Define to 1 if you have the <stdlib.h> header file. */
|
62
|
+
#define HAVE_STDLIB_H 1
|
63
|
+
|
64
|
+
/* Define to 1 if you have the <strings.h> header file. */
|
65
|
+
#define HAVE_STRINGS_H 1
|
66
|
+
|
67
|
+
/* Define to 1 if you have the <string.h> header file. */
|
68
|
+
#define HAVE_STRING_H 1
|
69
|
+
|
70
|
+
/* Define to 1 if you have the <sys/epoll.h> header file. */
|
71
|
+
/* #undef HAVE_SYS_EPOLL_H */
|
72
|
+
|
73
|
+
/* Define to 1 if you have the <sys/eventfd.h> header file. */
|
74
|
+
/* #undef HAVE_SYS_EVENTFD_H */
|
75
|
+
|
76
|
+
/* Define to 1 if you have the <sys/event.h> header file. */
|
77
|
+
#define HAVE_SYS_EVENT_H 1
|
78
|
+
|
79
|
+
/* Define to 1 if you have the <sys/inotify.h> header file. */
|
80
|
+
/* #undef HAVE_SYS_INOTIFY_H */
|
81
|
+
|
82
|
+
/* Define to 1 if you have the <sys/queue.h> header file. */
|
83
|
+
#define HAVE_SYS_QUEUE_H 1
|
84
|
+
|
85
|
+
/* Define to 1 if you have the <sys/select.h> header file. */
|
86
|
+
#define HAVE_SYS_SELECT_H 1
|
87
|
+
|
88
|
+
/* Define to 1 if you have the <sys/signalfd.h> header file. */
|
89
|
+
/* #undef HAVE_SYS_SIGNALFD_H */
|
90
|
+
|
91
|
+
/* Define to 1 if you have the <sys/stat.h> header file. */
|
92
|
+
#define HAVE_SYS_STAT_H 1
|
93
|
+
|
94
|
+
/* Define to 1 if you have the <sys/types.h> header file. */
|
95
|
+
#define HAVE_SYS_TYPES_H 1
|
96
|
+
|
97
|
+
/* Define to 1 if you have the <unistd.h> header file. */
|
98
|
+
#define HAVE_UNISTD_H 1
|
99
|
+
|
100
|
+
/* Name of package */
|
101
|
+
#define PACKAGE "libev"
|
102
|
+
|
103
|
+
/* Define to the address where bug reports for this package should be sent. */
|
104
|
+
#define PACKAGE_BUGREPORT ""
|
105
|
+
|
106
|
+
/* Define to the full name of this package. */
|
107
|
+
#define PACKAGE_NAME ""
|
108
|
+
|
109
|
+
/* Define to the full name and version of this package. */
|
110
|
+
#define PACKAGE_STRING ""
|
111
|
+
|
112
|
+
/* Define to the one symbol short name of this package. */
|
113
|
+
#define PACKAGE_TARNAME ""
|
114
|
+
|
115
|
+
/* Define to the version of this package. */
|
116
|
+
#define PACKAGE_VERSION ""
|
117
|
+
|
118
|
+
/* Define to 1 if you have the ANSI C header files. */
|
119
|
+
#define STDC_HEADERS 1
|
120
|
+
|
121
|
+
/* Version number of package */
|
122
|
+
#define VERSION "3.9"
|