boostorg / boostorg/fiber

fiber_specific_ptr leaks objects

Abierto
#211 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
510
Forks
123
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Description
main fiber's fiber_specific_ptr is not correctly cleaned.

## Test Code:
```c++
#include
#include
#include

void clean_fss_int(int* p) {
printf("clean int = %d\n", *p);
}
static boost::fibers::fiber_specific_ptr fs0(clean_fss_int);
static thread_local boost::fibers::fiber_specific_ptr fs1(clean_fss_int);

int main(int argc, char* argv[]) {
boost::fibers::fiber_specific_ptr fs2(clean_fss_int);
auto func = [&](const char* name) {
printf("---- %s ----\n", name);
boost::fibers::fiber_specific_ptr fs3(clean_fss_int);
if (fs0.get() == NULL) {
fs0.reset(new int(0));
}
if (fs1.get() == NULL) {
fs1.reset(new int(1));
}
if (fs2.get() == NULL) {
fs2.reset(new int(2));
}
if (fs3.get() == NULL) {
fs3.reset(new int(3));
}
};
std::thread thr(func, "thread");
thr.join();
boost::fibers::fiber fb(func, "fiber");
fb.join();
return 0;
}
```
## Expected output:
---- thread ----
clean int = 3
clean int = 0
clean int = 1
clean int = 2
---- fiber ----
clean int = 3
clean int = 0
clean int = 1
clean int = 2

## Actual output:
---- thread ----
clean int = 3
clean int = 1
---- fiber ----
clean int = 3
clean int = 0
clean int = 1
clean int = 2

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.