diff options
author | Eric Wong <e@80x24.org> | 2016-07-28 00:06:46 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-07-28 02:08:58 +0000 |
commit | 77e43e7803440af0cee9272fb00930664abe01aa (patch) | |
tree | e77258df750438ccd0ea6225ff1739e035bac2cc | |
parent | 489fdac7bed0750f09d65b6105cb0b70d7ccf61f (diff) | |
download | clogger-77e43e7803440af0cee9272fb00930664abe01aa.tar.gz |
These defines may cause incompatibilities if Ruby or other system headers decide to clobber these. It's also confusing to override existing, well-known-and-standardized functions.
-rw-r--r-- | ext/clogger_ext/blocking_helpers.h | 7 | ||||
-rw-r--r-- | ext/clogger_ext/clogger.c | 4 |
2 files changed, 7 insertions, 4 deletions
diff --git a/ext/clogger_ext/blocking_helpers.h b/ext/clogger_ext/blocking_helpers.h index c03c2f5..15634b8 100644 --- a/ext/clogger_ext/blocking_helpers.h +++ b/ext/clogger_ext/blocking_helpers.h @@ -54,6 +54,9 @@ static ssize_t my_write(int fd, const void *buf, size_t count) return r; } -# define stat(path,buf) my_stat((path),(buf)) -# define write(fd,buf,count) my_write((fd),(buf),(count)) +# define nogvl_stat(path,buf) my_stat((path),(buf)) +# define nogvl_write(fd,buf,count) my_write((fd),(buf),(count)) +#else /* !WITHOUT_GVL, for Ruby 1.8 users: */ +# define nogvl_stat(path,buf) stat((path),(buf)) +# define nogvl_write(fd,buf,buf) write((fd),(buf),(count)) #endif /* !WITHOUT_GVL */ diff --git a/ext/clogger_ext/clogger.c b/ext/clogger_ext/clogger.c index 3db9235..f29cf26 100644 --- a/ext/clogger_ext/clogger.c +++ b/ext/clogger_ext/clogger.c @@ -243,7 +243,7 @@ static void write_full(int fd, const char *buf, size_t count) ssize_t r; while (count > 0) { - r = write(fd, buf, count); + r = nogvl_write(fd, buf, count); if ((size_t)r == count) { /* overwhelmingly likely */ return; @@ -993,7 +993,7 @@ static VALUE to_path(VALUE self) if (sscanf(cpath, "/dev/fd/%u", &devfd) == 1) rv = fstat((int)devfd, &sb); else - rv = stat(cpath, &sb); + rv = nogvl_stat(cpath, &sb); /* * calling this method implies the web server will bypass |