コード例 #1
0
ファイル: ngx_shmap.c プロジェクト: love320/echo_iad
int ngx_shmap_inc_int(ngx_shm_zone_t* zone, ngx_str_t* key,int64_t i,uint32_t exptime, int64_t* ret)
{
	assert(zone != NULL);
	assert(key != NULL);
	assert(ret != NULL);
	
	ngx_int_t rc = 0;
	ngx_str_t data = ngx_null_string;
	uint8_t value_type = VT_INT64;
	rc = ngx_shmap_get(zone, key, &data, &value_type, NULL,NULL);
	if(rc == 0){
		if(value_type != VT_INT64){
			//NLOG_ERROR("key [%V] value_type [%d] invalid!",key, value_type);
			return -1;
		}
		int64_t* p = (int64_t*)data.data;
		*ret = __sync_add_and_fetch(p, i);
	}else{
		//不存在,插入新的
		ngx_str_set_int64(&data, &i);
		rc =ngx_shmap_set(zone, key, &data, value_type, exptime,0);
		if(rc == 0){
			*ret = i;
		}
	}
	return rc;
}
コード例 #2
0
void 
ngx_str_handler_set_int64(ngx_str_t* key, int64_t* ikey) {
	ngx_str_set_int64(key,ikey);
}