2016-10-05 6 views
1

일부 데이터를 대기열로 보내고 싶지만 errno S_objLib_OBJ_UNAVAILABLE (3997698)을 얻는 이유가 무엇인지 알 수 없습니다. 여기에 내가 무엇을 가지고 :왜 errno가 S_objLib_OBJ_UNAVAILABLE입니까?

static MSG_Q_ID bfd_to_alm_data = NULL; 
// in bfd_queues_create(void) 
if (!bfd_to_alm_data) { 
     bfd_to_alm_data = msgQCreate 
      (
      MAX_BFD_MSGS,    /* max messages that can be queued */ 
      sizeof(bfd_report_t),   /* max bytes in a message */ 
      MSG_Q_FIFO    /* message queue options */ 
      ); 
     if (!bfd_to_alm_data) { 
      printErrno(errno); 
      jpax_logMsg(LOG_ERROR, LOGSTREAM_SWITCH, "ERROR: Failed to create queue for bfd messages to alarm engine. errno %d\n",errno,0,0,0,0); 
      return ERROR; 
     } 
// and this is where I get the error: 
if (!bfd_to_alm_data) 
      rv = bfd_queues_create(); 
     if (rv < 0) { 
      jpax_logMsg(LOG_ERROR, LOGSTREAM_SWITCH, "ERROR: Could not initialize bfd_to_alm_data! errcode %d \n",rv,0,0,0,0); 
      return; 
     } 

     rv = msgQSend(bfd_to_alm_data, 
       &bfd_info, 
       sizeof(bfd_report_t), 
       NO_WAIT, 
       MSG_PRI_NORMAL);   
     if (rv < 0) { 
      jpax_logMsg(LOG_ERROR, LOGSTREAM_SWITCH, "ERROR: Could not push Bfd alarm data onto queue! errno %d\n",errno,0,0,0,0); 
     } 

무슨 일이 일어나고 있을까요?

내가 확인할 수

는 Qeue 핸들 msgQCreate()에 대한 호출하고, 우리가있을 때 그 errno는이 S_objLib_OBJ_UNAVAILABLE으로 설정됩니다 볼 수 있습니다 (특히 커널 API 레퍼런스 가이드) 매뉴얼에서 msgQSend()

+0

을 기입하셨습니까? –

+0

@TonyTannous 예,'#include "errno.h" – cerr

+0

죄송합니다. 아무 생각 없습니다. –

답변

1

과 동일하게 유지 대기열에 공간이 없으며 제한 시간 값으로 NO_WAIT를 지정했습니다.

S_objLib_OBJ_UNAVAILABLE 여유 버퍼 공간을 사용할 수이고 NO_WAIT 시간 제한이 지정되었습니다.

코드에서 NO_WAIT을 (를) 지정했습니다. msgQ가 가득 찼음을 나타내는 것은 없지만 모든 코드를 표시하지는 않았을 수 있습니다.

확인 사항 :

  1. MAX_BFD_MSGS의 정의 - 확인 충분히
  2. 그 무언가가 큐에서 읽고 확인하십시오 큰합니다.
  3. WAIT_FOREVER을 사용해보십시오. 큐에 공간이있을 때까지 msgQSend 작업이 차단됩니다.
+0

알았어, 내 응용 프로그램에 문제가있어 * S_objLib_OBJ_UNAVAILABLE 사용 가능한 버퍼 공간이없고 NO_WAIT 시간 제한이 지정되었습니다. * 범인을 찾기 위해 확실히 도움이되었습니다! 감사! – cerr