conn->File() 得到 f
f->NewFile() 得到 rawFile
conn和f的 fd 不同
f 和 rawFile 的fd相同
rawFile被回收后,因为fd相同会影响到f我能理解,但为什么会影响到conn的读写呢?
因为f和rawFile的fd相同,第二个被回收Close的会报bad file descriptor错误,
但这个错误本身并不影响conn的读写(读写方法不会有error)吧
想明白了还是一个并发问题,在f关闭后,有新conn进来,然后再关闭rawFile,
因为新conn和rawFile的fd相同,这时候新conn的fd已经被关闭了,所以读写才会出现bad file descriptor
根本原因则是:
linux下文件描述符的分配方法(fs/file.c: alloc_fd):每次优先分配fd值最小的空闲fd。