예제 #1
0
RegionSnapshot dense_region(
  RegionType region_type,
  void *start_addr, void* permanent_addr, size_t size)
{
  simgrid::mc::RegionSnapshot::flat_data_ptr data;
  if (!_sg_mc_ksm)
    data = simgrid::mc::RegionSnapshot::flat_data_ptr((char*) malloc(size));
  else {
    char* ptr = (char*) mmap(nullptr, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_POPULATE, -1, 0);
    if (ptr == MAP_FAILED)
      throw std::bad_alloc();
    simgrid::mc::data_deleter deleter(
      simgrid::mc::data_deleter::Munmap, size);
    data = simgrid::mc::RegionSnapshot::flat_data_ptr(ptr, deleter);
  }
  mc_model_checker->process().read_bytes(data.get(), size,
    remote(permanent_addr),
    simgrid::mc::ProcessIndexDisabled);
  if (_sg_mc_ksm)
    // Mark the region as mergeable *after* we have written into it.
    // There no point to let KSM do the hard work before that.
    madvise(data.get(), size, MADV_MERGEABLE);

  simgrid::mc::RegionSnapshot region(
    region_type, start_addr, permanent_addr, size);
  region.flat_data(std::move(data));

  XBT_DEBUG("New region : type : %s, data : %p (real addr %p), size : %zu",
            to_cstr(region_type), region.flat_data(), permanent_addr, size);
  return std::move(region);
}
예제 #2
0
파일: ztracer.hpp 프로젝트: agshew/blkin
			ZTrace(string name, ZTraceRef t, ZTraceEndpointRef ep)
			{
				this->ep = ep;
				c_name = to_cstr(name);
				blkin_init_child(&trace, t->get_blkin_trace(), ep->get_blkin_ep(),
						c_name);
			}
예제 #3
0
파일: ztracer.hpp 프로젝트: agshew/blkin
			ZTrace(string name, ZTraceEndpointRef ep, struct blkin_trace_info *info, bool child=false)
			{
				c_name = to_cstr(name);
				this->ep = ep;
				if (child)
					blkin_init_child_info(&trace, info, ep->get_blkin_ep(), c_name);
				else {
					blkin_init_new_trace(&trace, c_name, ep->get_blkin_ep());
					blkin_set_trace_info(&trace, info);
				}
			}
예제 #4
0
static int32_t load_player_info(player_t ply)
{
	if(ply->_status == normal){
		char str[256];
		snprintf(str,256,"hmget %s attr,bag,skill",to_cstr(ply->_actname));
		int32_t ret = gamedb_request(ply,new_dbrequest(str,load_ply_info_cb,ply,tls_get(MSGDISCP_TLS)));
		if(ret == 0){ 
			ply->_status = loading;
		}
		return ret;
	}
	return 0;
}
예제 #5
0
int main(){

	string_t s1 = new_string("hello");

	string_append(s1,"hahaha");
	printf("%s\n",to_cstr(s1));

	string_t s2 = new_string("");
	string_copy(s2,s1,5);
	printf("%s\n",to_cstr(s2));

	string_append(s1,"hahahafasfasdfasfasfasdfasdfasdfasdfasfasfasfasdfasdfdf");
	printf("%s\n",to_cstr(s1));

	string_append(s1,"hahahafasfasdfasfasfasdfasdfasdfasdfasfasfasfasdfasdfdfhahahafasfasdfasfasfasdfasdfasdfasdfasfasfasfasdfasdfdfhahahafasfasdfasfasfasdfasdfasdfasdfasfasfasfasdfasdfdf");
	printf("%s\n",to_cstr(s1));

	string_copy(s2,s1,80);
	printf("%s\n",to_cstr(s2));
	printf("%d\n",string_len(s2));
	return 0;
}
예제 #6
0
int32_t gamedb_request(player_t ply,db_request_t request)
{
	if(ply){
		//根据actname计算hash值,将请求分布到不同的数据库中
		const char *actname = to_cstr(ply->_actname);
		uint64_t hashcode = burtle_hash((uint8_t*)actname,strlen(actname),0);
		uint64_t dbindex = hashcode%(g_dbcount-1);
		return g_asyndbs[dbindex]->asyn_request(g_asyndbs[dbindex],request);
	}else{
		return 	g_asyndbs[g_dbcount-1]->asyn_request(g_asyndbs[g_dbcount-1],request);
		
	}	
}
예제 #7
0
파일: log.c 프로젝트: grasswin/KendyNet
static void* log_routine(void *arg){
	printf("log_routine\n");
	while(1){
		uint32_t ms = stop ? 0:100;
		struct log_item *item = NULL;
        msgque_get(pending_log,(lnode**)&item,ms);
        if(item){
	        if(item->_logfile->file == NULL || item->_logfile->total_size > MAX_FILE_SIZE)
	        {
	        	if(item->_logfile->total_size){
	        		fclose(item->_logfile->file);
	        		item->_logfile->total_size = 0;
	        	}
	        	//还没创建文件
	        	char filename[128];
	        	struct timespec tv;
	    		clock_gettime(CLOCK_REALTIME, &tv);
				struct tm _tm;
				localtime_r(&tv.tv_sec, &_tm);
				snprintf(filename,128,"%s-%04d-%02d-%02d %02d.%02d.%02d.%03d.log",to_cstr(item->_logfile->filename),
					   _tm.tm_year+1900,_tm.tm_mon+1,_tm.tm_mday,_tm.tm_hour,_tm.tm_min,_tm.tm_sec,(int32_t)tv.tv_nsec/1000000);
				item->_logfile->file = fopen(filename,"w+");
				if(!item->_logfile->file){
					printf("%d\n",errno);
					free(item);	
					continue;
				}
	        }
	        fprintf(item->_logfile->file,"%s\n",item->content);
	        //fflush(item->_logfile->file);
	        item->_logfile->total_size += strlen(item->content);
	        free(item);
	    }else if(stop){   	
	    	break;
	    }
	}
	//向所有打开的日志文件写入"log close success"
	struct logfile *l = NULL;
	char buf[128];
	mutex_lock(g_mtx_log_file_list);
	while((l = LLIST_POP(struct logfile*,&g_log_file_list)) != NULL)
	{
		int32_t size = write_prefix(buf,LOG_INFO);
        snprintf(&buf[size],128-size,"log close success");
        fprintf(l->file,"%s\n",buf);
	}	
	mutex_unlock(g_mtx_log_file_list); 	
	printf("log_routine end\n");
	return NULL;
}
예제 #8
0
파일: ztracer.hpp 프로젝트: agshew/blkin
			ZTrace(string name, ZTraceEndpointRef ep)
				:ep(ep)
			{
				c_name = to_cstr(name);
				blkin_init_new_trace(&trace, c_name, ep->get_blkin_ep());
			}
예제 #9
0
파일: ztracer.hpp 프로젝트: agshew/blkin
			ZTraceEndpoint(string ip, int port, string endpoint_name)
			{
				c_ip = to_cstr(ip);
				c_name = to_cstr(endpoint_name);
				blkin_init_endpoint(&ep, c_ip, port, c_name);
			}
예제 #10
0
int main(){

	lua_State *L = luaL_newstate();
	luaL_openlibs(L);
	if (luaL_dofile(L,"gateconfig.lua")) {
		const char * error = lua_tostring(L, -1);
		lua_pop(L,1);
		printf("%s\n",error);
		return 0;
	}
		
	luaObject_t gatecfg = GETGLOBAL_OBJECT(L,"gateserver");
	agentcount = GET_OBJ_FIELD(gatecfg,"agentservice_count",int,lua_tonumber);
	release_luaObj(gatecfg);
	
	luaObject_t toclicfg = GETGLOBAL_OBJECT(L,"toclient");
	string_t cliip = new_string(GET_OBJ_FIELD(toclicfg,"ip",const char *,lua_tostring));
	int      cliport = GET_OBJ_FIELD(toclicfg,"port",int,lua_tonumber);
	release_luaObj(toclicfg);
	
	luaObject_t togamecfg = GETGLOBAL_OBJECT(L,"togame");
	g_gameip = new_string(GET_OBJ_FIELD(togamecfg,"ip",const char *,lua_tostring));
	g_gameport = GET_OBJ_FIELD(togamecfg,"port",int,lua_tonumber);
	release_luaObj(togamecfg);
	
	luaObject_t torediscfg = GETGLOBAL_OBJECT(L,"toredis");
	g_redisip = new_string(GET_OBJ_FIELD(torediscfg,"ip",const char *,lua_tostring));
	g_redisport = GET_OBJ_FIELD(torediscfg,"port",int,lua_tonumber);
	release_luaObj(torediscfg);
	
	lua_close(L);
	
	InitNetSystem();
	
	
	//两个poller,一个用于accept,一个用于数据传输
	asynnet_t asynet = asynnet_new(1);
	
	if(start_verifyservice() != 0){
		SYS_LOG(LOG_ERROR,"start verifyservice failed\n");
		return 0;
	}
	
	/*if(start_togame_service(asynet) != 0){
		SYS_LOG(LOG_ERROR,"start togame service failed\n");
		return 0;
	}*/
		
	uint8_t i;
	for(i = 0; i < agentcount; ++i){
		g_agents[i] = new_agentservice(i,asynet);
	}
	
	msgdisp_t listener = new_msgdisp(asynet,1,CB_CONNECT(agent_connect));
	//开启对客户端的监听	
	int32_t err = 0;
	listener->listen(listener,0,to_cstr(cliip),cliport,&err);
	if(err != 0)
	{
		SYS_LOG(LOG_ERROR,"start listen failed:%d\n",err);
		return 0;
	}
	setup_signal_handler();	    
    while(!stop){
        msg_loop(listener,500);
    }
    
	//stop_togame_service();
	stop_verifyservice();
	
	for(i = 0; i < agentcount; ++i){
		stop_agentservice(g_agents[i]);
	}		

	return 0;
}
예제 #11
0
std::string const to_string(LoadRes loadres) { return to_cstr(loadres); }
예제 #12
0
static int32_t ply_cmp_function(void *key1,void *key2)
{
	string_t name1 = (string_t)key1;
	string_t name2 = (string_t)key2;
	return (int32_t)strcmp(to_cstr(name1),to_cstr(name2));
}
예제 #13
0
int32_t fn_compare(void *l,void *r)
{
	return strcmp(to_cstr((string_t)l),to_cstr((string_t)r));
}