6.9.1 qmgr_ defer.c:销毁活动数据
2016-04-07 15:31
141 查看
qmgr_ defer.c函数用来处理邮件的延迟发送。
当邮件被延迟,要进行两个方面的处理:邮件文件本身和邮件在内存中的“活动数据”(即“in-core”数据)。
虽然邮件被延迟了,但邮件文件本身依然在active队列中,这显然不是长久之计。active队列应该仅放置可以发送的邮件,再说active队列中的邮件数也是有限的,不能让延迟信件占据宝贵的空间。所以最终要将信件移出active队列,这通过qmgr_active.c中的一系列函数完成。
QMGR_QUEUE维持着两个QMGR_ENTRY_LIST链表:todo和busy,分别表示待发邮件和已经处于发信流程的邮件。虽然邮件被延迟了,但已经处于发信流程的邮件不会受影响。关键是要处理有待发送的邮件。因为每一次qmgr_job_entry_select的运行都将导致一个QMGR_ENTRY结构体从todo链表搬运到busy链表,而如果邮件被延迟,这样的搬运会变得毫无意义,所以要销毁延迟邮件的todo链表中的QMGR_ENTRY结构体。
qmgr_defer.c函数的主要作用就是根据是否存在retry模块分情况处理todo链表。虽然最终将销毁todo链表中的QMGR_ENTRY结构体,但由于retry模块是一个独立的进程,所以其销毁工作是并行开展的。否则将在原QMGR_QUEUE上实施销毁工作,这将影响qmgr模块的效率。无论是否存在retry模块,均将使用qmgr_entry_done函数完成销毁工作。“done”意味着对QMGR_ENTRY结构体进行最终的处理。
qmgr_defer.c循环所有QMGR_TRANSPORT,为每个QMGR_TRANSPORT调用qmgr_defer_todo函数:
for (queue = transport->queue_list.next;queue; queue = next)
当邮件被延迟,要进行两个方面的处理:邮件文件本身和邮件在内存中的“活动数据”(即“in-core”数据)。
虽然邮件被延迟了,但邮件文件本身依然在active队列中,这显然不是长久之计。active队列应该仅放置可以发送的邮件,再说active队列中的邮件数也是有限的,不能让延迟信件占据宝贵的空间。所以最终要将信件移出active队列,这通过qmgr_active.c中的一系列函数完成。
QMGR_QUEUE维持着两个QMGR_ENTRY_LIST链表:todo和busy,分别表示待发邮件和已经处于发信流程的邮件。虽然邮件被延迟了,但已经处于发信流程的邮件不会受影响。关键是要处理有待发送的邮件。因为每一次qmgr_job_entry_select的运行都将导致一个QMGR_ENTRY结构体从todo链表搬运到busy链表,而如果邮件被延迟,这样的搬运会变得毫无意义,所以要销毁延迟邮件的todo链表中的QMGR_ENTRY结构体。
qmgr_defer.c函数的主要作用就是根据是否存在retry模块分情况处理todo链表。虽然最终将销毁todo链表中的QMGR_ENTRY结构体,但由于retry模块是一个独立的进程,所以其销毁工作是并行开展的。否则将在原QMGR_QUEUE上实施销毁工作,这将影响qmgr模块的效率。无论是否存在retry模块,均将使用qmgr_entry_done函数完成销毁工作。“done”意味着对QMGR_ENTRY结构体进行最终的处理。
qmgr_defer.c循环所有QMGR_TRANSPORT,为每个QMGR_TRANSPORT调用qmgr_defer_todo函数:
for (queue = transport->queue_list.next;queue; queue = next)
相关文章推荐
- CSS 制作三角形原理剖析
- css选择器总结
- 多层json解析
- hadoop SecondNamenode
- (OK) VirtualBox 5.0.10 中 Fedora 23 在安装了增强工具后无法自动调节虚拟机分辨率的问题
- 剑指Offer——翻转英文句子中的单词顺序
- javascript 之闭包详解
- react-native-闪屏页
- 剑指offer:二叉树的下一个结点
- 理解 Javascript 的闭包
- 样式设置
- 【剑指offer系列】 打印1到最大的n位数___12
- javascript闭包详解
- php的date对象与javascript的Date对象区别
- 通过原生js添加div和css
- AngularJs 过滤器
- 制作单页的动画插件
- ReactNative学习十三-Props和State
- js正则验证之不能使用相同字符
- Sass编译Css