blocked in message_queue::timed_receive
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- cpp
- Área
- operating-systems
Línea de trabajo
Empieza reproduciendo la llamada reportada a message_queue::timed_receive con el tiempo de espera de 100 milisegundos y, después, inspecciona boost/interprocess/sync/detail/common_algorithms.hpp, donde try_based_lock gira mientras m.try_lock() devuelve false. Rastrea la propiedad del lock y la ruta del tiempo de espera; se considera terminado cuando la llamada reportada retorna en lugar de seguir bloqueada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I'm using boost_1_89_0 & boost::interprocess::message_queue for inter-process communication. The receiver calls timed_receive to receive messages with a timeout set to 100 milliseconds. It works correctly most of the time, but occasionally it gets blocked, meaning timed_receive does not return.
boost::interprocess::message_queue *msg_queue;
// ...
boost::posix_time::ptime timeout = boost::posix_time::microsec_clock::universal_time() + boost::posix_time::milliseconds(100);
bool ret = msg_queue->timed_receive(buf, 8192, recvd_size, priority, timeout);
I checked the call stack, and it is blocked at the following location:
boost\interprocess\sync\detail\common_algorithms.hpp
template<class MutexType>
void try_based_lock(MutexType &m)
{boost::interprocess::message_queue
if(!m.try_lock()){
spin_wait swait;
do{
if(m.try_lock()){
break;
}
else{
swait.yield();
}
}
while(1);
}
}
I stepped through the code and found that m.try_lock() keeps returning false.
Thanks.
- Lenguaje dominante
- C++
- Estrellas
- 186
- Forks
- 131
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de boostorg/interprocess
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
boostorg/interprocess#196 · 1 reacción ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
boostorg/interprocess#279 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 28/100
boostorg/interprocess#268 · 4 comentarios ·
-
Semaphore use in signalsAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
boostorg/interprocess#262 · 2 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 32/100
boostorg/interprocess#253 ·
Todos los issues de boostorg/interprocess
Issues similares
-
[request] poppler-data/0.4.12Abiertoupstream update
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
conan-io/conan-center-index#31098 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
ml-explore/mlx-c#136 ·
-
bug chart-audit
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
Los mantenedores suelen responder en 1 día