MCPcopy Create free account
hub / github.com/Tencent/libco / co_create_env

Function co_create_env

co_routine.cpp:461–519  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

459
460
461struct stCoRoutine_t *co_create_env( stCoRoutineEnv_t * env, const stCoRoutineAttr_t* attr,
462 pfn_co_routine_t pfn,void *arg )
463{
464
465 stCoRoutineAttr_t at;
466 if( attr )
467 {
468 memcpy( &at,attr,sizeof(at) );
469 }
470 if( at.stack_size <= 0 )
471 {
472 at.stack_size = 128 * 1024;
473 }
474 else if( at.stack_size > 1024 * 1024 * 8 )
475 {
476 at.stack_size = 1024 * 1024 * 8;
477 }
478
479 if( at.stack_size & 0xFFF )
480 {
481 at.stack_size &= ~0xFFF;
482 at.stack_size += 0x1000;
483 }
484
485 stCoRoutine_t *lp = (stCoRoutine_t*)malloc( sizeof(stCoRoutine_t) );
486
487 memset( lp,0,(long)(sizeof(stCoRoutine_t)));
488
489
490 lp->env = env;
491 lp->pfn = pfn;
492 lp->arg = arg;
493
494 stStackMem_t* stack_mem = NULL;
495 if( at.share_stack )
496 {
497 stack_mem = co_get_stackmem( at.share_stack);
498 at.stack_size = at.share_stack->stack_size;
499 }
500 else
501 {
502 stack_mem = co_alloc_stackmem(at.stack_size);
503 }
504 lp->stack_mem = stack_mem;
505
506 lp->ctx.ss_sp = stack_mem->stack_buffer;
507 lp->ctx.ss_size = at.stack_size;
508
509 lp->cStart = 0;
510 lp->cEnd = 0;
511 lp->cIsMain = 0;
512 lp->cEnableSysHook = 0;
513 lp->cIsShareStack = at.share_stack != NULL;
514
515 lp->save_size = 0;
516 lp->save_buffer = NULL;
517
518 return lp;

Callers 2

co_createFunction · 0.85
co_init_curr_thread_envFunction · 0.85

Calls 2

co_get_stackmemFunction · 0.85
co_alloc_stackmemFunction · 0.85

Tested by

no test coverage detected