libco icon indicating copy to clipboard operation
libco copied to clipboard

用co_free销毁共享栈协程时产生内存泄漏

Open Ananfa opened this issue 8 years ago • 1 comments

原实现:

void co_free( stCoRoutine_t *co )
{
    if (!co->cIsShareStack) 
    {    
        free(co->stack_mem->stack_buffer);
        free(co->stack_mem);
    }   
    free( co );
}

建议修改为:

void co_free( stCoRoutine_t *co )
{
    if (!co->cIsShareStack) 
    {    
        free(co->stack_mem->stack_buffer);
        free(co->stack_mem);
    } else {
        if (co->stack_mem->occupy_co == co) {
            co->stack_mem->occupy_co = NULL;
        }
        
        if (co->save_buffer)
        {
            free(co->save_buffer), co->save_buffer = NULL;
        }
    }
    free( co );
}

Ananfa avatar Dec 27 '17 09:12 Ananfa

这是我在libco基础上结合protobuf开发的rpc库libcorpc。包含rpc的服务端和客户端库。目的是简化分布式服务器间的消息通讯和处理。 其中的co路径下是对libco库的改版。欢迎指正!

Ananfa avatar Jul 14 '19 04:07 Ananfa