The idea for for freeing old file descriptor tables was taken from the FreeBSD Junior Jobs
website: https://wiki.freebsd.org/JuniorJobs#Free_old_file_descriptor_tables.
During the life of a process, new file descriptor tables may be allocated. When a new table
is allocated, the old table is placed in a free list and held onto until all processes
referencing them exit.
When a new file descriptor table is allocated, the old file descriptor table can be freed when
the current process has a single-thread and the file descriptor table is not being shared
by any other processes.
based off of r342237