mirror of
https://github.com/Tencent/libco.git
synced 2025-05-08 19:51:15 +08:00
112 lines
2.2 KiB
C
112 lines
2.2 KiB
C
/*
|
|
* Tencent is pleased to support the open source community by making Libco available.
|
|
|
|
* Copyright (C) 2014 THL A29 Limited, a Tencent company. All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
|
|
#ifndef __CO_ROUTINE_INNER_H__
|
|
|
|
#include "co_routine.h"
|
|
#include "coctx.h"
|
|
struct stCoRoutineEnv_t;
|
|
struct stCoSpec_t
|
|
{
|
|
void *value;
|
|
};
|
|
|
|
struct stStackMem_t
|
|
{
|
|
stCoRoutine_t* occupy_co;
|
|
int stack_size;
|
|
char* stack_bp; //stack_buffer + stack_size
|
|
char* stack_buffer;
|
|
|
|
};
|
|
|
|
struct stShareStack_t
|
|
{
|
|
unsigned int alloc_idx;
|
|
int stack_size;
|
|
int count;
|
|
stStackMem_t** stack_array;
|
|
};
|
|
|
|
|
|
|
|
struct stCoRoutine_t
|
|
{
|
|
stCoRoutineEnv_t *env;
|
|
pfn_co_routine_t pfn;
|
|
void *arg;
|
|
coctx_t ctx;
|
|
|
|
char cStart;
|
|
char cEnd;
|
|
char cIsMain;
|
|
char cEnableSysHook;
|
|
char cIsShareStack;
|
|
|
|
void *pvEnv;
|
|
|
|
//char sRunStack[ 1024 * 128 ];
|
|
stStackMem_t* stack_mem;
|
|
|
|
|
|
//save satck buffer while confilct on same stack_buffer;
|
|
char* stack_sp;
|
|
unsigned int save_size;
|
|
char* save_buffer;
|
|
|
|
stCoSpec_t aSpec[1024];
|
|
|
|
};
|
|
|
|
|
|
|
|
//1.env
|
|
void co_init_curr_thread_env();
|
|
stCoRoutineEnv_t * co_get_curr_thread_env();
|
|
|
|
//2.coroutine
|
|
void co_free( stCoRoutine_t * co );
|
|
void co_yield_env( stCoRoutineEnv_t *env );
|
|
|
|
//3.func
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------------------------
|
|
|
|
struct stTimeout_t;
|
|
struct stTimeoutItem_t ;
|
|
|
|
stTimeout_t *AllocTimeout( int iSize );
|
|
void FreeTimeout( stTimeout_t *apTimeout );
|
|
int AddTimeout( stTimeout_t *apTimeout,stTimeoutItem_t *apItem ,uint64_t allNow );
|
|
|
|
struct stCoEpoll_t;
|
|
stCoEpoll_t * AllocEpoll();
|
|
void FreeEpoll( stCoEpoll_t *ctx );
|
|
|
|
stCoRoutine_t * GetCurrThreadCo();
|
|
void SetEpoll( stCoRoutineEnv_t *env,stCoEpoll_t *ev );
|
|
|
|
typedef void (*pfnCoRoutineFunc_t)();
|
|
|
|
#endif
|
|
|
|
#define __CO_ROUTINE_INNER_H__
|