chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tree-wide: whenever we include libgen.h, immediately undefine basename()
[elogind.git]
/
src
/
shared
/
async.c
diff --git
a/src/shared/async.c
b/src/shared/async.c
index 3876deda70c9954eefa3c43ba5915b3471a4a48f..7725e6d7d363e7ee17821214863525dd062e4c18 100644
(file)
--- a/
src/shared/async.c
+++ b/
src/shared/async.c
@@
-41,24
+41,18
@@
int asynchronous_job(void* (*func)(void *p), void *arg) {
* only in long running processes. */
r = pthread_attr_init(&a);
* only in long running processes. */
r = pthread_attr_init(&a);
- if (r
!=
0)
+ if (r
>
0)
return -r;
r = pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
return -r;
r = pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
- if (r != 0) {
- r = -r;
+ if (r > 0)
goto finish;
goto finish;
- }
r = pthread_create(&t, &a, func, arg);
r = pthread_create(&t, &a, func, arg);
- if (r != 0) {
- r = -r;
- goto finish;
- }
finish:
pthread_attr_destroy(&a);
finish:
pthread_attr_destroy(&a);
- return r;
+ return
-
r;
}
static void *sync_thread(void *p) {
}
static void *sync_thread(void *p) {
@@
-73,7
+67,7
@@
int asynchronous_sync(void) {
}
static void *close_thread(void *p) {
}
static void *close_thread(void *p) {
-
safe_close(PTR_TO_INT(p)
);
+
assert_se(close_nointr(PTR_TO_INT(p)) != -EBADF
);
return NULL;
}
return NULL;
}
@@
-86,9
+80,13
@@
int asynchronous_close(int fd) {
* but it doesn't, so we work around it, and hide this as a
* far away as we can. */
* but it doesn't, so we work around it, and hide this as a
* far away as we can. */
- r = asynchronous_job(close_thread, INT_TO_PTR(fd));
- if (r < 0)
- safe_close(fd);
+ if (fd >= 0) {
+ PROTECT_ERRNO;
+
+ r = asynchronous_job(close_thread, INT_TO_PTR(fd));
+ if (r < 0)
+ assert_se(close_nointr(fd) != -EBADF);
+ }
return -1;
}
return -1;
}