// Macro to record file descriptor creation. // e.g.: // int socket(int domain, int type, int protocol) { // return FDTRACK_CREATE_NAME("socket", __socket(domain, type, protocol)); // } #define FDTRACK_CREATE_NAME(name, fd_value) \
({ \ int __fd = (fd_value); \ 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) && \
!__predict_false(__android_fdtrack_globally_disabled)) { \
ErrnoRestorer r; \
tls.fdtrack_disabled = true; \
android_fdtrack_event event; \
event.fd = __fd; \
event.type = ANDROID_FDTRACK_EVENT_TYPE_CREATE; \
event.data.create.function_name = name; \
atomic_load (&__android_fdtrack_hook)(&event); \
tls.fdtrack_disabled = false; \
} \
} \
__fd; \
})
// Macro to record file descriptor creation, with the current function's name. // e.g.: // int socket(int domain, int type, int protocol) { // return FDTRACK_CREATE_NAME(__socket(domain, type, protocol)); // } #define FDTRACK_CREATE(fd_value) FDTRACK_CREATE_NAME(__func__, (fd_value))
// Macro to record file descriptor closure. // Note that this does not actually close the file descriptor. #define FDTRACK_CLOSE(fd_value) \
({ \ int __fd = (fd_value); \ 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) && \
!__predict_false(__android_fdtrack_globally_disabled)) { \ int saved_errno = errno; \
tls.fdtrack_disabled = true; \
android_fdtrack_event event; \
event.fd = __fd; \
event.type = ANDROID_FDTRACK_EVENT_TYPE_CLOSE; \
atomic_load (&__android_fdtrack_hook)(&event); \
tls.fdtrack_disabled = false; \
errno = saved_errno; \
} \
} \
__fd; \
})
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.