私はLinuxカーネルのカスタムプロトコルでフロー制御を実装しています。私はACKを受け取ったときに、書込み待ち行列からACKパケットを取り除きたい。ここにいくつかのコードがありますskb_dequeue()後のkfree_skb()はLinuxカーネルをフリーズします
for(i = (ack->sequence - qp->first_unack); i>0&&sk->sk_write_queue.qlen>0; i++){
skb_del = skb_dequeue(&sk->sk_write_queue);
qp->first_unack++;
kfree_skb(skb_del);
}
私はこのコードからカーネルフリーズを取得します。しかし、私がkfree(skb_del)
をコメントアウトすると、すべてうまくいく。なぜこのようなことが起こっているのでしょうか?どのように私はメモリを解放することができますか?
を得ることを願っています
include/net/sock.h
あなたは凍結が良いファイル – Kaluを与えることができて行きますアイディア。標準ソケットAPIの一部を使用している関数ではありませんか? –