コード例 #1
0
ファイル: transportbridge.c プロジェクト: dmaguire/OpenMAMA
mama_status avisTransportBridge_start(avisTransportBridge* transportBridge)
{
    /* stop Avis event loop */
    int rc;

    CHECK_TRANSPORT(transportBridge); 

    if (1 == wInterlocked_read (&transportBridge->mDispatching))
    {
        mama_log (MAMA_LOG_LEVEL_WARN, "avisTransportBridge_start(): "
                                       "Avis already dispatching");
        log_avis_error (MAMA_LOG_LEVEL_WARN, transportBridge->mAvis);
        return MAMA_STATUS_OK;
    }

    wInterlocked_set (1, &transportBridge->mDispatching);

    rc = wthread_create (&transportBridge->mThreadId, NULL, 
                        avisDispatchThread, transportBridge);

    if (0 != rc)
    {
        mama_log (MAMA_LOG_LEVEL_ERROR, "wthread_create returned %d", rc);
        return MAMA_STATUS_SYSTEM_ERROR;
    }

    return MAMA_STATUS_OK;   
}
コード例 #2
0
ファイル: transportbridge.c プロジェクト: dmaguire/OpenMAMA
mama_status avisTransportBridge_stop(avisTransportBridge* transportBridge)
{
    CHECK_TRANSPORT(transportBridge); 

    if (0 == wInterlocked_read (&transportBridge->mDispatching))
    {
        mama_log (MAMA_LOG_LEVEL_WARN, "avisTransportBridge_stop(): "
                                       "Avis already stopped");
        log_avis_error (MAMA_LOG_LEVEL_WARN, transportBridge->mAvis);
        return MAMA_STATUS_OK;
    }

    wInterlocked_set (0, &transportBridge->mDispatching);

    /* Dispatch a dummy notification to get the event polling to iterate
     * another loop and examine the mDispatching state */
    elvin_invoke (transportBridge->mAvis, &closeNotification, transportBridge);

    while (-1 == wsem_wait(&transportBridge->mAvisDispatchSem)) 
    {
        if (errno != EINTR) return MAMA_STATUS_SYSTEM_ERROR;
    }

    wthread_join (transportBridge->mThreadId, NULL);

    return MAMA_STATUS_OK;
}      
コード例 #3
0
ファイル: transportbridge.c プロジェクト: dmaguire/OpenMAMA
mama_status
avisBridgeMamaTransport_getNativeTransport (transportBridge transport,
                                             void**          result)
{
    CHECK_TRANSPORT(transport);
    *result = avisTransport(transport);
    return MAMA_STATUS_OK;
}
コード例 #4
0
ファイル: transportbridge.c プロジェクト: dmaguire/OpenMAMA
int
avisTransportBridge_isDispatching (
    avisTransportBridge* transportBridge)
{
    CHECK_TRANSPORT(transportBridge); 

    return wInterlocked_read (&transportBridge->mDispatching);
}
コード例 #5
0
ファイル: prefetch.c プロジェクト: jwilkins/zerovm
enum ChannelSourceType GetChannelProtocol(const char *url)
{
  char *prefix[] = CHANNEL_SOURCE_PREFIXES;
  assert(url != NULL);

  CHECK_TRANSPORT(ChannelIPC);
  CHECK_TRANSPORT(ChannelTCP);
  CHECK_TRANSPORT(ChannelINPROC);
  CHECK_TRANSPORT(ChannelPGM);
  CHECK_TRANSPORT(ChannelEPGM);
  CHECK_TRANSPORT(ChannelUDP);
  return ChannelSourceTypeNumber;
}