当前位置: 技术问答>linux和unix
netfilter中能否使用自旋锁数组啊?
来源: 互联网 发布时间:2017-01-11
本文导语: 想在一个netfilter程序里写日志,先把日志写到一个字符串数组中,然后一个内核线程把数组中有数据的单元写到文件中。想设一个自旋锁的数组。每次用spin_trylock_bh来检测数组里哪个数组可以写数据。主要程序如下:...
想在一个netfilter程序里写日志,先把日志写到一个字符串数组中,然后一个内核线程把数组中有数据的单元写到文件中。想设一个自旋锁的数组。每次用spin_trylock_bh来检测数组里哪个数组可以写数据。主要程序如下:但是这段程序总是导致死机。请教:为什么锁不好用:
coun = 0;
while((spin_lock_res = spin_trylock_bh(&(buf_lock[coun]))) == 0 || buf_stat[coun] == 1)
{
coun++;
if(coun = MAX_LOG_BUFS_NUM)
{
coun = 0;
}
if(spin_lock_res == 1)
{
spin_unlock_bh(&buf_lock[coun]);
}
}
buf_stat[coun] = 1;
sprintf(log_buf[coun],"conn %x:%d to %x:%d at %sn",
m_sconn->cli_ip,m_sconn->cli_port,m_sconn->svr_ip,m_sconn->svr_port,t_str);
spin_unlock_bh(&buf_lock[coun]);
coun = 0;
while((spin_lock_res = spin_trylock_bh(&(buf_lock[coun]))) == 0 || buf_stat[coun] == 1)
{
coun++;
if(coun = MAX_LOG_BUFS_NUM)
{
coun = 0;
}
if(spin_lock_res == 1)
{
spin_unlock_bh(&buf_lock[coun]);
}
}
buf_stat[coun] = 1;
sprintf(log_buf[coun],"conn %x:%d to %x:%d at %sn",
m_sconn->cli_ip,m_sconn->cli_port,m_sconn->svr_ip,m_sconn->svr_port,t_str);
spin_unlock_bh(&buf_lock[coun]);
|
不是我说你啊,这代码也太乱了吧,你都不整理一下阿 。还一个地方少了个等号
coun = 0;
while()
{
coun++;
if(coun == MAX_LOG_BUFS_NUM) ///你这里还写漏了一个等号
{
coun = 0;
}
if (spin_trylock_bh(&(buf_lock[coun]) {
if( buf_stat[coun] ==0) {
buf_stat[coun] = 1;
sprintf(log_buf[coun],"conn %x:%d to %x:%d at %sn",
m_sconn->cli_ip,m_sconn->cli_port,m_sconn->svr_ip,m_sconn->svr_port,t_str);
}
spin_unlock_bh(&buf_lock[coun]);
}
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。