fdtrack: don't do anything while vforked.
Bug: http://b/153926671
Test: 32/64-bit bionic-unit-tests on blueline, x86_64 emulator
Change-Id: If42905f3d6a76ed70a45e5b9edd029ffd7789045
diff --git a/libc/private/bionic_fdtrack.h b/libc/private/bionic_fdtrack.h
index 174ba1d..752dd8d 100644
--- a/libc/private/bionic_fdtrack.h
+++ b/libc/private/bionic_fdtrack.h
@@ -47,7 +47,8 @@
#define FDTRACK_CREATE_NAME(name, fd_value) \
({ \
int __fd = (fd_value); \
- if (__fd != -1 && __predict_false(__android_fdtrack_hook)) { \
+ if (__fd != -1 && __predict_false(__android_fdtrack_hook) && \
+ !__predict_false(__get_thread()->is_vforked())) { \
bionic_tls& tls = __get_bionic_tls(); \
/* fdtrack_disabled is only true during reentrant calls. */ \
if (!__predict_false(tls.fdtrack_disabled)) { \
@@ -76,7 +77,8 @@
#define FDTRACK_CLOSE(fd_value) \
({ \
int __fd = (fd_value); \
- if (__fd != -1 && __predict_false(__android_fdtrack_hook)) { \
+ if (__fd != -1 && __predict_false(__android_fdtrack_hook) && \
+ !__predict_false(__get_thread()->is_vforked())) { \
bionic_tls& tls = __get_bionic_tls(); \
if (!__predict_false(tls.fdtrack_disabled)) { \
int saved_errno = errno; \