ソースコードリーディング: pthread_mutex_destroy(3)

pthread_mutex_destroy(3) のソースコードリーディングを hiboma/hiboma に push した

github.com

pthread_mutex_destroy(3) 済みの mutex を pthread_mutex_lock(3) しようとすると EINVAL を返すが、Linux (正確には NPTL だろうか) ではどんな実装か気になったので読んだ

  • pthread_mutex_destroy は pthread_mutex_t の内部メンバに -1 をセットしているだけだった。
    • 何らかの「リソース」を破棄しているわけでないのだな
    • free(3), close(2) や munmap(3) ... 等々呼び出しを想像していたが全く違った
  • ついでに標準ではどのような実装を推奨しているかも合わせて読んでみた
    • オンラインで参照できるのは The Open Group Base Specifications Issue 7

システムコールやライブラリ関数で EINVAL を返すものはよく見かけるが、何がどうなって Invalid なのだろう? と度々疑問になる。そういう時はソースを読む

ソースコードリーディング: shmdt(2)

shmdt(2) のソースコードリーディングを hiboma/hiboma に push した

github.com

モチベーション

shmdt(2) したアドレスで segmentation fault を起こす問題をリサーチしていた。man を呼んでも不明瞭な箇所があり、どんな実装か気になったので読んでいた

  • プロセスから見ると、shmdt(2) 済みのセグメントは munmap(2) したのと同等にみえてる感じになる
    • 該当アドレスの vm_area_struct が消されている
  • vm_area_struct の無いアドレスを 読み/書き/実行 しようとしたら segmentaion fault するよね

というあたりが解消された

感想文

読んだ感想としては

  • SysV 共有メモリセグメントの実装は、mm/mmap.c の実装を拝借しているのだな
  • 呼び出し階層が浅くて、他のシステムコールに比べて素朴に見える
    • struct vm_area_struct の扱い方のお勉強によさそう
    • ( 深追いして do_munmap を読んでいくとちょっと大変 )

といったところ

hiboma リポジトリとは?

ソースコード(主に Linux カーネル) や技術書を読んだ際の軌跡や、デバッグトラブルシューティングの履歴などを残しているリポジトリです。

ソースコードリーディング: /proc/sys/kernel/shm_rmid_forced

shmget(2) の挙動を調べてる最中に見つけた /proc/sys/kernel/shm_rmid_forced について、ソースコードリーディングした内容を hiboma/hiboma リポジトリに push した

github.com

IPC_RMID を強制する = 参照カウントが 0 になった System V 共有メモリセグメントをカーネルに破棄してもらうための proc/sysctl インタフェースと理解。

コミット

このコミットで追加されてたらしい

github.com

hiboma リポジトリとは?

ソースコード(主に Linux カーネル) や技術書を読んだ際の軌跡や、デバッグトラブルシューティングの履歴などを残しているリポジトリです。

spotify.com

Amazon Prime Music より 自分の聴きたいような 楽曲が豊富だし、デスクトップアプリのインタフェースは Apple Music (= iTunes ) よりブラウザに近く扱いやすくて好み

f:id:hiboma:20161004222349p:plain

広告は何度も聴いてるうちに耳につくようになったので、お金を払う動機にはなりそう

f:id:hiboma:20161005124704p:plain

いろいろ聴いてたのしんでいる

open.spotify.com

open.spotify.com

open.spotify.com