skynet的timer似乎有问题
skynet.timeout 传进去 number 范围内的数值但是会溢出,
调查发现 skynet.timeout 调用的是 c 的方法:
c.intcommand("TIMEOUT",ti)
对应的C方法中会把传入的 number 转换成 int32:
static int
lintcommand(lua_State *L) {
struct skynet_context * context = lua_touserdata(L, lua_upvalueindex(1));
const char * cmd = luaL_checkstring(L,1);
const char * result;
const char * parm = NULL;
char tmp[64]; // for integer parm
if (lua_gettop(L) == 2) {
if (lua_isnumber(L, 2)) {
int32_t n = (int32_t)luaL_checkinteger(L,2);
sprintf(tmp, "%d", n);
parm = tmp;
} else {
parm = luaL_checkstring(L,2);
}
}
result = skynet_command(context, cmd, parm);
if (result) {
char *endptr = NULL;
lua_Integer r = strtoll(result, &endptr, 0);
if (endptr == NULL || *endptr != '\0') {
// may be real number
double n = strtod(result, &endptr);
if (endptr == NULL || *endptr != '\0') {
return luaL_error(L, "Invalid result %s", result);
} else {
lua_pushnumber(L, n);
}
} else {
lua_pushinteger(L, r);
}
return 1;
}
return 0;
}
所以传入数字不再 2^31 ~ -2^31 的值都将会溢出,然后就导致bug产生。
skynet的timer似乎有问题的更多相关文章
- skynet记录6:定时器
稍后填坑 kernel中,每一次时钟中断会trap到kernel code,这个时间间隔称之为jiffies,每秒钟发生的次数为HZ 如果是4核,分配到每个核就是HZ/4 cat /boot/conf ...
- skynet源码阅读<4>--定时器实现
昨天和三石公聊天,他提到timer的实现原理,我当时迟疑了一下,心想timer不是系统底层时钟中断驱动上层进程/线程,累积计时实现的么?他简述了timer的实现,什么堆排序,优先级队列等,与我想象的不 ...
- skynet源码阅读<6>--线程调度
相比于上节我们提到的协程调度,skynet的线程调度从逻辑流程上来看要简单很多.下面我们就来具体做一分析.首先自然是以skynet_start.c为入口: static void start(int ...
- skynet启动流程及调用服务
3.基本原理 3.1启动流程 1.skynet-src/skynet_main.c 这个是main()函数所在,主要就是设置一下lua的环境.默认的配置.打开config配置文件,并修改默认配置. ...
- C# - 计时器Timer
System.Timers.Timer 服务器计时器,允许指定在应用程序中引发事件的重复时间间隔. using System.Timers: // 在应用程序中生成定期事件 public class ...
- winform 用户控件、 动态创建添加控件、timer控件、控件联动
用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...
- 【WPF】 Timer与 dispatcherTimer 在wpf中你应该用哪个?
源:Roboby 1.timer或重复生成timer事件,dispatchertimer是集成到队列中的一个时钟.2.dispatchertimer更适合在wpf中访问UI线程上的元素 3.Dispa ...
- STM32F10xxx 之 System tick Timer(SYSTICK Timer)
背景 研究STM32F10xxx定时器的时候,无意间看到了System tick Timer,于是比较深入的了解下,在此做个记录. 正文 System tick Timer是Cotex-M内核的24位 ...
- 本地数据Store。Cookie,Session,Cache的理解。Timer类主要用于定时性、周期性任务 的触发。刷新Store,Panel
本地数据Store var monthStore = Ext.create('Ext.data.Store', { storeId : 'monthStore', autoLoad : false, ...
- WinForm用户控件、动态创建添加控件、timer控件--2016年12月12日
好文要顶 关注我 收藏该文 徐淳 关注 - 1 粉丝 - 3 0 0 用户控件: 通过布局将多个控件整合为一个控件,根据自己的需要进行修改,可对用户控件内的所有控件及控件属性进行修 ...
随机推荐
- kafka消费者那些事儿
前言 消息的消费一般有两种模式,推模式和拉模式.推模式是服务端主动将消息推送给消费者,而拉模式是消费者主动向服务端发起请求来拉取消息.kakfa采用的是拉模式,这样可以很好的控制消费速率.那么kafk ...
- kprobe_events shell模式使用教程
kprobe_events shell模式使用教程 kprobe 使用前提 需要内核启用以下配置 CONFIG_KPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_KPROB ...
- 通过实例了解vue3.3更新的特征
开场白 5月份,vue团队发布了 vue3.3. 这次小版本的发布主要解决了-- Vue 与 TypeScript 一起使用时的许多长期存在的痛点. 下面我们一起来学习一下vue3.3新特征 准备新新 ...
- Galaxy Release_20.09 发布,新增多个数据上传组件
Galaxy Project(https://galaxyproject.org/)是在云计算背景下诞生的一个生物信息学可视化分析开源项目. 该项目由美国国家科学基金会(NSF).美国国家人类基因组研 ...
- Python socket记录
目录 网络编程 1.基本概念 Python中的网络编程 网络编程 1.基本概念 1.什么是客户端/服务器架构? 服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的"服务& ...
- 效率神器,边看网页边问ChatGPT!神级ChatGPT插件(浏览器扩展)推荐!
如果在看一个网页时,有些词不认识.句子不知道含义,怎么办? 憨憨版:不认识就算了呗,还能咋滴 进阶版:复制到 Google/Baidu 里问一问: AI达人版:复制到 ChatGPT/Claude 里 ...
- IOS开发-UIImageView基本用法
UIImageView是iOS中用于显示图像(图片.gif.svg等)的视图. 它的主要功能有: 1. 显示图片UIImageView可以通过image属性显示一张UIImage类型的图片.可以是本地 ...
- java开发的配置文件配置到数据库(配置到配置文件里面个人感觉修改较麻烦,故配置到数据库)
配置文件的创建表sql CREATE TABLE `checkwork_tab_properties` ( `id` varchar(50) NOT NULL COMMENT '主键id', `typ ...
- Vue-Element UI 文件上传与下载
项目结构 后端 前端 效果演示 上传文件 下载文件 Code 后端代码 跨域 /** * 跨域配置 * @author Louis * @date Jan 12, 2019 */ @Configura ...
- PostgreSQL 10 文档: PostgreSQL 客户端工具
PostgreSQL 客户端应用 这部份包含PostgreSQL客户端应用和工具的参考信息.不是所有这些命令都是通用工具,某些需要特殊权限.这些应用的共同特征是它们可以被运行在任何主机上,而不管数 ...