blog mail me! feed

修复nginx的upload module不支持0.7.x的bug

今天准备装上nginxupload module做些测试的, 结果发现自己的nginx 0.7.44下,
upload module没法通过编译, 问题出错在ngx_http_upload_module.c的1152行左右.

ngx_conf_merge_path_value(conf->store_path,
                              prev->store_path,
                              NGX_HTTP_PROXY_TEMP_PATH, 1, 2, 0,
                              ngx_garbage_collector_temp_handler, cf);

查看 ngx_conf_merge_path_value()的定义发现新的nginx中这个函数的变化很大,
改为了: char *ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path, ngx_path_t *prev, ngx_path_init_t *init);

所以修改为了下代码:


static ngx_path_init_t  ngx_init_temp_path = {
    ngx_string(NGX_HTTP_PROXY_TEMP_PATH), { 1, 2, 0 }
};
	// for nginx 0.7.x, hack by killkeeper
	ngx_path_t *_path = ( ngx_path_t *) malloc( strlen(NGX_HTTP_PROXY_TEMP_PATH) );
	memcpy ( _path, &NGX_HTTP_PROXY_TEMP_PATH, strlen(NGX_HTTP_PROXY_TEMP_PATH) );

	ngx_conf_merge_path_value( cf, &_path, prev->store_path, &ngx_init_temp_path);

本来想加一个预编译头的, 不过发现nginx没有定义NGX_VERSION类似的的这种宏,
就算了.

恩, 目前编译是通过了, 明天具体测试下工作正常不.

悲剧啊!

第一个细菌基因预测程序写完了, 倒是有个巨大的bug,
内存回收那里总是会出错, 而且必然出错在第431个ORF序列, 为什么我就没有对这个数字敏感呢?
这个数字正好是霍乱弧菌小染色体上明确编码蛋白质的基因数…

为了支持多染色体文件的输入, 我改使用了顺序容器托管了染色体序列,
只有一个变量,  用于存储种子ORF数目的, 忘了使它自增, 于是就引起了后来的一系列内存操作越界,
以至于让我花了几个小时几乎崩溃去找到使得内存回收出错的地方…

seedOrfNumber = PickSeedOrfs(pttFile.c_str(), listSeedOrfs, listPutativeOrfs, instances);
改成
 seedOrfNumber += PickSeedOrfs(pttFile.c_str(), listSeedOrfs, listPutativeOrfs, instances);
后, 世界都清净了…

叫你丫的不注意… 悲剧啊! 教训啊! 惨痛的刻骨铭心的教训啊!!