rb-fsevent 0.9.7 → 0.9.8
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.
- checksums.yaml +4 -4
- data/ext/fsevent_watch/TSICTString.c +0 -21
- data/ext/fsevent_watch/main.c +2 -0
- data/ext/fsevent_watch/signal_handlers.c +66 -0
- data/ext/fsevent_watch/signal_handlers.h +16 -0
- data/lib/rb-fsevent/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33b6645ea468e8ad531d5cc24e3b8ae9794a30a9
|
4
|
+
data.tar.gz: 2d775b72b9303d0e93068850a7d119315bcad81d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cbb1ac611ea29a0fa14e72a8f016741e39bf0d9987717244ad9dbe14188a8c94f891687e12d0320f96dea49b47f5a9697deb189eb9751e42dda406b0a680e65
|
7
|
+
data.tar.gz: 2c87389ccab291b776189be56f12f322e0e26e2ea0ed1d22429f5d932b212788cf3e29e15ce02f762f82849d6a293e01e630955aaa01b7a0db17db69046c1711
|
@@ -113,27 +113,6 @@ static inline CFStringRef TSICTStringCreateStringFromIntermediateRepresentation(
|
|
113
113
|
return string;
|
114
114
|
}
|
115
115
|
|
116
|
-
static inline CFDataRef TSICTStringCreateDataWithDataOfTypeAndFormat(CFDataRef data, TSITStringTag type, TSITStringFormat format)
|
117
|
-
{
|
118
|
-
CFRetain(data);
|
119
|
-
|
120
|
-
if (format == kTSITStringFormatDefault) {
|
121
|
-
format = TSICTStringGetDefaultFormat();
|
122
|
-
}
|
123
|
-
|
124
|
-
TStringIRep* rep = TSICTStringCreateWithDataOfTypeAndFormat(data, type, format);
|
125
|
-
if (rep == NULL) {
|
126
|
-
return NULL;
|
127
|
-
}
|
128
|
-
|
129
|
-
CFDataRef result = TSICTStringCreateDataFromIntermediateRepresentation(rep);
|
130
|
-
|
131
|
-
TSICTStringDestroy(rep);
|
132
|
-
CFRelease(data);
|
133
|
-
|
134
|
-
return result;
|
135
|
-
}
|
136
|
-
|
137
116
|
static inline void TSICTStringAppendObjectToMutableDataWithFormat(CFTypeRef object, CFMutableDataRef buffer, TSITStringFormat format)
|
138
117
|
{
|
139
118
|
if (object == NULL) {
|
data/ext/fsevent_watch/main.c
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#include "common.h"
|
2
|
+
#include "signal_handlers.h"
|
2
3
|
#include "cli.h"
|
3
4
|
#include "FSEventsFix.h"
|
4
5
|
|
@@ -470,6 +471,7 @@ static void callback(__attribute__((unused)) FSEventStreamRef streamRef,
|
|
470
471
|
|
471
472
|
int main(int argc, const char* argv[])
|
472
473
|
{
|
474
|
+
install_signal_handlers();
|
473
475
|
parse_cli_settings(argc, argv);
|
474
476
|
|
475
477
|
if (needs_fsevents_fix) {
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#include "signal_handlers.h"
|
2
|
+
#include <fcntl.h>
|
3
|
+
#include <signal.h>
|
4
|
+
#include <stdio.h>
|
5
|
+
#include <stdlib.h>
|
6
|
+
#include <sys/time.h>
|
7
|
+
#include <unistd.h>
|
8
|
+
|
9
|
+
|
10
|
+
#define PPID_ALARM_INTERVAL 2 // send SIGALRM every this seconds
|
11
|
+
|
12
|
+
|
13
|
+
static pid_t orig_ppid;
|
14
|
+
|
15
|
+
|
16
|
+
static void signal_handler(int _) {
|
17
|
+
exit(EXIT_FAILURE);
|
18
|
+
}
|
19
|
+
|
20
|
+
static void check_ppid(void) {
|
21
|
+
if (getppid() != orig_ppid) {
|
22
|
+
exit(EXIT_FAILURE);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
static void check_stdout_open(void) {
|
27
|
+
if (fcntl(STDOUT_FILENO, F_GETFD) < 0) {
|
28
|
+
exit(EXIT_FAILURE);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
static void alarm_handler(int _) {
|
33
|
+
check_ppid();
|
34
|
+
check_stdout_open();
|
35
|
+
alarm(PPID_ALARM_INTERVAL);
|
36
|
+
signal(SIGALRM, alarm_handler);
|
37
|
+
}
|
38
|
+
|
39
|
+
static void die(const char *msg) {
|
40
|
+
fprintf(stderr, "\nFATAL: %s\n", msg);
|
41
|
+
abort();
|
42
|
+
}
|
43
|
+
|
44
|
+
static void install_signal_handler(int sig, void (*handler)(int)) {
|
45
|
+
if (signal(sig, handler) == SIG_ERR) {
|
46
|
+
die("Could not install signal handler");
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
void install_signal_handlers(void) {
|
51
|
+
// check pipe is still connected
|
52
|
+
check_stdout_open();
|
53
|
+
|
54
|
+
// watch getppid() every PPID_ALARM_INTERVAL seconds
|
55
|
+
orig_ppid = getppid();
|
56
|
+
if (orig_ppid <= 1) {
|
57
|
+
die("prematurely zombied");
|
58
|
+
}
|
59
|
+
install_signal_handler(SIGALRM, alarm_handler);
|
60
|
+
alarm(PPID_ALARM_INTERVAL);
|
61
|
+
|
62
|
+
// be sure to exit on SIGHUP, SIGPIPE
|
63
|
+
install_signal_handler(SIGHUP, signal_handler);
|
64
|
+
install_signal_handler(SIGPIPE, signal_handler);
|
65
|
+
}
|
66
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* @headerfile signal_handlers.h
|
3
|
+
* Signal handlers to stop the zombie hordes
|
4
|
+
*
|
5
|
+
* Catch and handle signals better so that we die faster like a good meat puppet.
|
6
|
+
*/
|
7
|
+
|
8
|
+
|
9
|
+
#ifndef fsevent_watch_signal_handlers_h
|
10
|
+
#define fsevent_watch_signal_handlers_h
|
11
|
+
|
12
|
+
|
13
|
+
void install_signal_handlers(void);
|
14
|
+
|
15
|
+
|
16
|
+
#endif // fsevent_watch_signal_handlers_h
|
data/lib/rb-fsevent/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-fsevent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibaud Guillaume-Gentil
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -80,6 +80,8 @@ files:
|
|
80
80
|
- ext/fsevent_watch/compat.h
|
81
81
|
- ext/fsevent_watch/defines.h
|
82
82
|
- ext/fsevent_watch/main.c
|
83
|
+
- ext/fsevent_watch/signal_handlers.c
|
84
|
+
- ext/fsevent_watch/signal_handlers.h
|
83
85
|
- ext/rakefile.rb
|
84
86
|
- lib/rb-fsevent.rb
|
85
87
|
- lib/rb-fsevent/fsevent.rb
|
@@ -105,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
107
|
version: '0'
|
106
108
|
requirements: []
|
107
109
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.5.1
|
110
|
+
rubygems_version: 2.4.5.1
|
109
111
|
signing_key:
|
110
112
|
specification_version: 4
|
111
113
|
summary: Very simple & usable FSEvents API
|