perl의 경우 자체적으로 io buffer를 사용하는 것으로 보인다. 아님 말구..
어쨌든, perl에 있는 file system 관련 function들 중에는 io buffer를 사용하는
것들과, io buffer를 bypass하는 것들이 있다. 이것들을 섞어서 쓰면 당연히
문제가 된다. 현재 posb의 웹 소스의 경우가 그렇다. 그런데, io buffer를
사용하지 않는 function을 call하기 직전/직후에 io buffer가 flush된다면
괜찮다. 생각해 보면, "직후"의 io buffer flush는 없어도 될 듯하다. 어차피
io buffer가 flush됐으므로 io buffer를 사용하는 function들도 새로 buffer를
채워야 하니까.
지금 내가 알아본 바로는, flock() 같은 function은 io buffer를 flush하는
side-effect를 가진 것으로 보인다. 지금 Posb의 경우에 io buffer를 사용하지
않는 syswrite()을 자주 사용하고 있는데, 대부분의 경우에 syswrite()이
call되기 직전에 flock()를 call하고 있다. 몇몇 곳에서 그렇지 않은 부분이
있는데, 이번에 아이디 발급 코드의 버그도 거기에서 비롯된 것으로 보인다.
지금은 일단 그런 곳들을 찾아내서 syswrite()이 call되기 직전에 flock()를
부르게 하거나, 혹은 역시 io buffer를 사용하지 않는 sysseek()을 사용하였다.
그런데, 아직도 문제가 있다. 뭔가, 아직 발견하지 못한 다른 요인이 있는
모양이다. 머리털 빠지겠다. 다행히 숱이 많다지만.. ㅋㅋ