리눅스 커널의 커스텀 프로토콜에서 흐름 제어를 구현하고 있습니다. ACK를 받으면 쓰기 대기열에서 승인 된 패킷을 제거하려고합니다. 다음은 몇 가지 코드입니다.skb_dequeue() 이후의 kfree_skb()가 리눅스 커널을 고정시킵니다.
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)
을 주석으로 처리합니다. 어떤 아이디어가 왜 이런 일입니까? 어떻게하면 메모리를 비울 수 있습니까?
커널 고정 메시지 또는 커널 크래시 덤프를 제공 할 수 있습니까? – Kalu
커널 로그 파일에는 고정이 파일에 대한 쓰기를 중지하기 때문에 아무 것도 포함되어 있지 않습니다. –