vsftpd中很管用的同异步信号处理代码

本文详细介绍了VSFTPD中用于处理同异步信号的代码实现,包括信号同步处理函数、信号检查机制和信号安装、阻塞及解阻塞功能。通过这段代码,可以理解VSFTPD如何确保在特定点安全地执行非平凡的信号处理函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static struct vsf_sysutil_sig_details
{
  vsf_sighandle_t sync_sig_handler;  /*信号同步处理函数*/
  void* p_private;  /*参数*/
  int pending;  /*pending 信号*/
  int running;   /*信号处理函数是否在运行状态*/
  int use_alarm;
} s_sig_details[NSIG];

 

static void vsf_sysutil_common_sighandler(int signum)
{
  if (signum < 0 || signum >= NSIG)
  {
    /* bug() is not async safe but this check really is a "cannot happen"
     * debug aid.
     */
    bug("signal out of range in vsf_sysutil_common_sighandler");
  }
  if (s_sig_details[signum].sync_sig_handler)
  {
    s_sig_details[signum].pending = 1;
    /* Since this synchronous signal framework has a small race (signal coming
     * in just before we start a blocking call), there's the option to fire an
     * alarm repeatedly until the signal is handled.
     */
    if (s_sig_details[signum].use_alarm)
    {
      alarm(1);
    }
  }
}

/* Notes. This signal check is evaluated after potentially blocking system
 * calls, i.e. at highly defined points in the code. Since we only interrupt
 * at these definite locations, the signal handlers can be non-trivial
 * without us having to worry about re-entrancy.
 *
 * We guarantee that a handler for a given signal is not re-entrant. This

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值