]> ruderich.org/simon Gitweb - coloredstderr/coloredstderr.git/blobdiff - src/trackfds.h
Inline fast part of tracked_fds_find().
[coloredstderr/coloredstderr.git] / src / trackfds.h
index 9b2aaa6701c854f6c3c7ae3c570b4984ebf1b289..175f1e387d17fd9672c5bc066c088018bd32f8ab 100644 (file)
@@ -299,10 +299,25 @@ static int tracked_fds_remove(int fd) {
     /* Not found. */
     return 0;
 }
+
+static int tracked_fds_find_slow(int fd);
+/*
+ * tracked_fds_find() is called for each hook call and should be as fast as
+ * possible. As most file descriptors are < TRACKFDS_STATIC_COUNT, force the
+ * compiler to inline that part which is almost exclusively used.
+ *
+ * Inlining tracked_fds_add()/tracked_fds_remove() isn't worth the effort as
+ * they are not called often enough.
+ */
+inline static int tracked_fds_find(int fd) __always_inline;
 static int tracked_fds_find(int fd) {
     if (fd < TRACKFDS_STATIC_COUNT) {
         return tracked_fds[fd];
     }
+
+    return tracked_fds_find_slow(fd);
+}
+static int tracked_fds_find_slow(int fd) {
     if (tracked_fds_list_count == 0) {
         return 0;
     }