Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

blocked in message_queue::timed_receive

Abierto
#274 1 comentario 0 reacciones 0 asignados Ver en GitHub

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

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de boostorg/interprocess

Todos los issues de boostorg/interprocess

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.