1

SQLite の新しい実験的機能は、ある時点でブロッキング posix ロックを使用します。OSX でのこの fcntl() 呼び出しでプロセスがブロックされるというテスト ケースがありますが、その理由がわかりません。同じテストが Linux でも機能しますが、これは幸運なタイミングかもしれません。

呼び出しは次のとおりです。

fcntl(fd, F_SETLKW, &f);

ここで、「f」は次のとおりです。

$1 = {
  l_start = 120,
  l_len = 1,
  l_pid = 0,
  l_type = 3,
  l_whence = 0
}

[lsof] によると、ファイルが開いているのは私のプロセスだけです。

bash-3.2$ sudo lsof test.db-shm
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
testfixtu 21393  dan   10u   REG   14,2    32768 228781731 test.db-shm

ただし、fcntl() が最初に呼び出されたときに、他のプロセスが競合するロックを保持していた可能性があります。

gdb は fcntl() に渡されるファイル記述子が「10」であることを示しているので、有効だと思います。

私の質問は、他のプロセスがファイルを開いていない場合、なぜ fcntl() がブロックされるのでしょうか?

4

0 に答える 0