Here are the two calls that free the font:
frame #1: 0x00000001001c5ffd Emacs`macfont_close(font=0x0000000105c2a8c0)
+ 13 at macfont.m:2621
frame #2: 0x000000010014de80 Emacs`font_clear_cache(f=<unavailable>,
cache=<unavailable>, driver=<unavailable>) + 304 at font.c:2620
frame #1: 0x00000001001c5ffd Emacs`macfont_close(font=0x0000000105c2a8c0)
+ 13 at macfont.m:2621
frame #2: 0x000000010011be9d Emacs`Fgarbage_collect [inlined]
cleanup_vector + 38 at alloc.c:2935
Notice that the pointer is the same in both cases. Both cleanup_vector() and
font_clear_cache() call
drv->close(font)
It seems that font_clear_cache is leaving the font around for the GC to clean
up (a second time) later.