v_subscriber v_participantGetBuiltinSubscriber( v_participant p) { v_subscriberQos sQos; v_readerQos rQos; v_kernel kernel; c_bool create_builtin_readers = FALSE; assert(p != NULL); assert(C_TYPECHECK(p, v_participant)); c_mutexLock(&p->builtinLock); if (p->builtinSubscriber == NULL) { kernel = v_objectKernel(p); sQos = v_subscriberQosNew(kernel, NULL); sQos->presentation.access_scope = V_PRESENTATION_TOPIC; c_free(sQos->partition); sQos->partition = c_stringNew(c_getBase(c_object(kernel)), V_BUILTIN_PARTITION); sQos->entityFactory.autoenable_created_entities = TRUE; p->builtinSubscriber = v_subscriberNew(p, V_BUILTINSUBSCRIBER_NAME, sQos, TRUE); v_subscriberQosFree(sQos); create_builtin_readers = TRUE; c_mutexUnlock(&p->builtinLock); assert(p->builtinSubscriber != NULL); rQos = v_readerQosNew(kernel, NULL); rQos->durability.kind = V_DURABILITY_TRANSIENT; rQos->reliability.kind = V_RELIABILITY_RELIABLE; rQos->history.kind = V_HISTORY_KEEPLAST; rQos->history.depth = 1; #define _CREATE_READER_(topicName) {\ q_expr expr; \ v_dataReader dr; \ expr = q_parse("select * from " topicName);\ dr = v_dataReaderNew(p->builtinSubscriber, topicName "Reader", \ expr, NULL, rQos, TRUE);\ c_free(dr); \ q_dispose(expr); \ } _CREATE_READER_(V_PARTICIPANTINFO_NAME) _CREATE_READER_(V_TOPICINFO_NAME) _CREATE_READER_(V_PUBLICATIONINFO_NAME) _CREATE_READER_(V_SUBSCRIPTIONINFO_NAME) #undef _CREATE_READER_ v_readerQosFree(rQos); } else { c_mutexUnlock(&p->builtinLock); } return c_keep(p->builtinSubscriber); }
void v_qosFree( v_qos qos) { if(qos != NULL){ switch(qos->kind){ case V_PARTICIPANT_QOS: v_participantQosFree(v_participantQos(qos)); break; case V_TOPIC_QOS: v_topicQosFree(v_topicQos(qos)); break; case V_WRITER_QOS: v_writerQosFree(v_writerQos(qos)); break; case V_READER_QOS: v_readerQosFree(v_readerQos(qos)); break; case V_PUBLISHER_QOS: v_publisherQosFree(v_publisherQos(qos)); break; case V_SUBSCRIBER_QOS: v_subscriberQosFree(v_subscriberQos(qos)); break; case V_PARTITION_QOS: case V_INDEX_QOS: case V_WRITERHISTORY_QOS: case V_GROUPHISTORY_QOS: case V_VIEW_QOS: case V_DATAVIEW_QOS: case V_KERNEL_QOS: case V_COUNT_QOS: break; default: break; } } }