[转] thttpd服务器在时间修改后导致CPU占用率过高的问题

转自:http://blog.csdn.net/taixinlfx/article/details/8727595

httpd挺好用的WEB服务器

可是遇到一个问题,当时间修改后,比如从1970年改到2013年时,thttpd就会占用CPU非常高。

查找后发现,其timers.c中tmr_run函数的实现有些问题,按如下修改后,问题解决:

[cpp]   view plain  copy
  1. void  
  2. tmr_run( struct timeval* nowP )  
  3.     {  
  4.     int h;  
  5.     Timer* t;  
  6.     Timer* next;  
  7.   
  8.     for ( h = 0; h < HASH_SIZE; ++h )  
  9.     for ( t = timers[h]; t != (Timer*) 0; t = next )  
  10.         {  
  11.         next = t->next;  
  12.         /* Since the lists are sorted, as soon as we find a timer 
  13.         ** that isn't ready yet, we can go on to the next list. 
  14.         */  
  15.         if ( t->time.tv_sec > nowP->tv_sec ||  
  16.          ( t->time.tv_sec == nowP->tv_sec &&  
  17.            t->time.tv_usec > nowP->tv_usec ) )  
  18.         break;  
  19.         (t->timer_proc)( t->client_data, nowP );  
  20.         if ( t->periodic )  
  21.         {  
  22.         /* Reschedule. */  
  23.         t->time.tv_sec += t->msecs / 1000L;  
  24.         t->time.tv_usec += ( t->msecs % 1000L ) * 1000L;  
  25.         if ( t->time.tv_usec >= 1000000L )  
  26.             {  
  27.             t->time.tv_sec += t->time.tv_usec / 1000000L;  
  28.             t->time.tv_usec %= 1000000L;  
  29.             }  
  30. //这里是添加的代码  
  31.         if (t->time.tv_sec + 10*60 < nowP->tv_sec)  
  32.             t->time.tv_sec = nowP->tv_sec;  
  33. //上面是添加的代码  
  34.         l_resort( t );  
  35.         }  
  36.         else  
  37.         tmr_cancel( t );  
  38.         }  
  39.     }  

这其中,10*60是为了避免,作者可能确实希望程序能够在追赶当前时间的时候多运行几遍


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值