order [lock [lock]] order summary
order サブコマンドは、解析対象となるコードがロックを獲得する順序についての情報をリストします。analyze サブコマンドの後でのみ実行が可能です。
ロックの組み合わせについての詳細情報を提示します。たとえば、以下のコマンドは、
% lock_lint order foo bar
ロック foo を保持している間に、ロック bar を獲得しようという試みがなされたかどうかを示します。出力は以下のようになります。
:foo :bar seen (first never write-held), valid
まず、この出力は、そうした試みが実際に行われたかどうか (seen または unseen) を伝えます。もし、そうした試みが行われた場合でも、ロックのどちらかまたはその両方が書き込み用に保持されていない場合は、上記の例のように、その旨を表すメッセージが括弧付きで表示されます。この例では、bar を獲得している間、foo はまったく書き込み用に保持されませんでした。
ロックの順序に関するアサーションが設定されている場合、その出力は、そのアサーションに対して指定された順序が valid (正しい) か invalid (正しくない) かを示します。foo および bar の順序についてのアサーションが存在しない場合、あるいは、いずれの順序もアサートされている場合 (一方のロックが獲得されている間、もう一方のロックも保持されているすべての箇所を、ユーザーが確認したい場合など)、出力は valid も invalid も示しません。
ロックが獲得される順序をより簡潔な形式で示します。たとえば、このサブコマンドの結果は次のようになります。
:f :e :d :g :a :f :c :g :a
この例では、ロック c に関してロック e および d の順序を決定するだけの情報がないため、2 通りの順序が考えられます。
一方では、循環が提示され、もう一方では、提示されないこともあります。たとえば、
:a :b :c :b
と表示されても、
:a :b :c :a
と表示されないこともあります (これらのロックのどれか 1 つを獲得しようとしている間、ほかのロックは絶対に保持されない場合など)。この解析からはデッドロック情報も報告されます。