I tried a strace -f /usr/bin/firefox... Looks like the issue ties to this read... 25377 read(3, 0xb7662058, 4096) = -1 EAGAIN (Resource temporarily unavailable) grep 0xb7662058 firefox-strace.txt |wc 425 4250 36975 Leading up to that read.. 25377 socket(PF_FILE, SOCK_STREAM, 0) = 3 25377 connect(3, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0"}, 20) = 0 25377 getpeername(3, {sa_family=AF_FILE, path=@"/tmp/.X11-unix/X0"}, [20]) = 0 25377 uname({sys="Linux", node="lt", ...}) = 0 25377 access("/var/run/gdm/auth-for-ryan-D3btog/database", R_OK) = 0 25377 open("/var/run/gdm/auth-for-ryan-D3btog/database", O_RDONLY) = 4 25377 fstat64(4, {st_mode=S_IFREG|0600, st_size=47, ...}) = 0 25377 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb74d1000 25377 read(4, "\1\0\0\2lt\0\0010\0\22MIT-MAGIC-COOKIE-1\0\20\27"..., 4096) = 47 25377 read(4, "", 4096) = 0 25377 close(4) = 0 25377 munmap(0xb74d1000, 4096) = 0 25377 getsockname(3, {sa_family=AF_FILE, NULL}, [2]) = 0 25377 fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR) 25377 fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 25377 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 25377 poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}]) 25377 writev(3, [{"l\0\v\0\0\0\22\0\20\0\0\0", 12}, {"", 0}, {"MIT-MAGIC-COOKIE-1", 18}, {"\0\0", 2}, {"\0273\203\3672'\0\367\360\375\" \377s\17\256", 16}, {"", 0}], 6) = 48 25377 read(3, 0xb7603a40, 8) = -1 EAGAIN (Resource temporarily unavailable) 25377 poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}]) 25377 read(3, "\1\0\v\0\0\0\3\3", 8) = 8 25377 read(3, "hX\243\0\0\0\340\3\377\377\37\0\0\1\0\0\24\0\377\377\1\7\0\0 \10\377\0\0\0\0"..., 3084) = 3084 25377 poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}]) 25377 writev(3, [{"b\0\5\0\f\0\0\0BIG-REQUESTS", 20}], 1) = 20 25377 poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}]) 25377 read(3, "\1\0\1\0\0\0\0\0\1\221\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32 25377 poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}]) 25377 writev(3, [{"\221\0\1\0", 4}], 1) = 4 25377 poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}]) 25377 read(3, "\1\0\2\0\0\0\0\0\377\377?\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32 25377 read(3, 0xb7662058, 4096) = -1 EAGAIN (Resource temporarily unavailable) 25377 poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}]) 25377 writev(3, [{"7\0\5\0\0\0\340\3\255\1\0\0\10\0\0\0\377\377\377\0\24\0\6\0\255\1\0\0\27\0\0\0"..., 44}, {NULL, 0}, {"", 0}], 3) = 44 25377 poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}]) 25377 read(3, "\1\10\4\0,\0\0\0\37\0\0\0\0\0\0\0\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 208 25377 read(3, 0xb7662058, 4096) = -1 EAGAIN (Resource temporarily unavailable) 25377 poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}]) 25377 writev(3, [{"b\0\5\0\t\0\340\3", 8}, {"XKEYBOARD", 9}, {"\0\0\0", 3}], 3) = 20 25377 poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}]) 25377 read(3, "\1\0\5\0\0\0\0\0\1\223v\251\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 4096) = 32 25377 read(3, 0xb7662058, 4096) = -1 EAGAIN (Resource temporarily unavailable) Just after the last unavailable (400+), firefox removes the 'lock' file in the profile dir. I'd rather not attach the full strace since it has some personal bits from the profile - if a dev would like to review the output I'd be happy to provide it directly.