This is an automated email from the ASF dual-hosted git repository.

jdanek pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/main by this push:
     new e05beea  DISPATCH-2272 Mark all functions called from Python with 
QD_EXPORT (#1413)
e05beea is described below

commit e05beeaf78ef655b1e99749b32d28738abd486ff
Author: Jiri Danek <[email protected]>
AuthorDate: Sun Oct 31 11:38:20 2021 +0100

    DISPATCH-2272 Mark all functions called from Python with QD_EXPORT (#1413)
---
 include/qpid/dispatch/connection_manager.h |  2 +-
 include/qpid/dispatch/error.h              |  6 ++++--
 include/qpid/dispatch/internal/export.h    | 23 +++++++++++++++++++++++
 src/adaptors/http_common.h                 |  8 ++++----
 src/adaptors/tcp_adaptor.c                 |  8 ++++----
 src/alloc_pool.c                           |  3 ++-
 src/connection_manager.c                   | 18 +++++++++---------
 src/dispatch.c                             | 24 ++++++++++++------------
 src/dispatch_private.h                     | 14 +++++++-------
 src/entity_cache.c                         |  4 ++--
 src/log.c                                  |  7 +++----
 src/policy.c                               |  2 +-
 src/router_agent.c                         |  2 +-
 src/router_node.c                          |  2 +-
 14 files changed, 74 insertions(+), 49 deletions(-)

diff --git a/include/qpid/dispatch/connection_manager.h 
b/include/qpid/dispatch/connection_manager.h
index 79fb881..68b3b6c 100644
--- a/include/qpid/dispatch/connection_manager.h
+++ b/include/qpid/dispatch/connection_manager.h
@@ -54,6 +54,6 @@ void qd_connection_manager_free(qd_connection_manager_t *cm);
  *
  * @param qd The dispatch handle returned by qd_dispatch.
  */
-void qd_connection_manager_start(qd_dispatch_t *qd);
+QD_EXPORT void qd_connection_manager_start(qd_dispatch_t *qd);
 
 #endif
diff --git a/include/qpid/dispatch/error.h b/include/qpid/dispatch/error.h
index 41d50e0..0bbce40 100644
--- a/include/qpid/dispatch/error.h
+++ b/include/qpid/dispatch/error.h
@@ -21,6 +21,8 @@
 
 #include "qpid/dispatch/enum.h"
 
+#include <qpid/dispatch/internal/export.h>
+
 #include <stdarg.h>
 
 /** @file
@@ -78,12 +80,12 @@ qd_error_t qd_error_clear();
 /**
  * @return Thread local error message. Includes text for error code.
  */
-const char* qd_error_message();
+QD_EXPORT const char* qd_error_message();
 
 /**
  *@return Thread local error code
  */
-qd_error_t qd_error_code();
+QD_EXPORT qd_error_t qd_error_code();
 
 /** Maximum length of a qd_error_message, useful for temporary buffers. */
 extern const int QD_ERROR_MAX;
diff --git a/include/qpid/dispatch/internal/export.h 
b/include/qpid/dispatch/internal/export.h
new file mode 100644
index 0000000..e80d69d
--- /dev/null
+++ b/include/qpid/dispatch/internal/export.h
@@ -0,0 +1,23 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/// @cond INTERNAL
+
+/// import/export macros
+#define QD_EXPORT __attribute__((visibility("default"))) __attribute__((used))
diff --git a/src/adaptors/http_common.h b/src/adaptors/http_common.h
index 8ba8365..cef654d 100644
--- a/src/adaptors/http_common.h
+++ b/src/adaptors/http_common.h
@@ -90,12 +90,12 @@ void qd_http_connector_decref(qd_http_connector_t* c);
 // Management Entity Interfaces (see HttpListenerEntity and 
HttpConnectorEntity in agent.py)
 //
 
-qd_http_listener_t *qd_dispatch_configure_http_listener(qd_dispatch_t *qd, 
qd_entity_t *entity);
-void qd_dispatch_delete_http_listener(qd_dispatch_t *qd, void *impl);
+QD_EXPORT qd_http_listener_t 
*qd_dispatch_configure_http_listener(qd_dispatch_t *qd, qd_entity_t *entity);
+QD_EXPORT void qd_dispatch_delete_http_listener(qd_dispatch_t *qd, void *impl);
 qd_error_t qd_entity_refresh_httpListener(qd_entity_t* entity, void *impl);
 
-qd_http_connector_t *qd_dispatch_configure_http_connector(qd_dispatch_t *qd, 
qd_entity_t *entity);
-void qd_dispatch_delete_http_connector(qd_dispatch_t *qd, void *impl);
+QD_EXPORT qd_http_connector_t 
*qd_dispatch_configure_http_connector(qd_dispatch_t *qd, qd_entity_t *entity);
+QD_EXPORT void qd_dispatch_delete_http_connector(qd_dispatch_t *qd, void 
*impl);
 qd_error_t qd_entity_refresh_httpConnector(qd_entity_t* entity, void *impl);
 
 // Management interfaces for retrieval of HttpRequestInfo entities
diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
index 2b8d109..e97b29b 100644
--- a/src/adaptors/tcp_adaptor.c
+++ b/src/adaptors/tcp_adaptor.c
@@ -1231,7 +1231,7 @@ static bool tcp_listener_listen(qd_tcp_listener_t *li) {
     return li->pn_listener;
 }
 
-qd_tcp_listener_t *qd_dispatch_configure_tcp_listener(qd_dispatch_t *qd, 
qd_entity_t *entity)
+QD_EXPORT qd_tcp_listener_t *qd_dispatch_configure_tcp_listener(qd_dispatch_t 
*qd, qd_entity_t *entity)
 {
     qd_tcp_listener_t *li = qd_tcp_listener(qd->server);
     if (!li || load_bridge_config(qd, li->config, entity, true) != 
QD_ERROR_NONE) {
@@ -1246,7 +1246,7 @@ qd_tcp_listener_t 
*qd_dispatch_configure_tcp_listener(qd_dispatch_t *qd, qd_enti
     return li;
 }
 
-void qd_dispatch_delete_tcp_listener(qd_dispatch_t *qd, void *impl)
+QD_EXPORT void qd_dispatch_delete_tcp_listener(qd_dispatch_t *qd, void *impl)
 {
     qd_tcp_listener_t *li = (qd_tcp_listener_t*) impl;
     if (li) {
@@ -1304,7 +1304,7 @@ void qd_tcp_connector_decref(qd_tcp_connector_t* c)
     }
 }
 
-qd_tcp_connector_t *qd_dispatch_configure_tcp_connector(qd_dispatch_t *qd, 
qd_entity_t *entity)
+QD_EXPORT qd_tcp_connector_t 
*qd_dispatch_configure_tcp_connector(qd_dispatch_t *qd, qd_entity_t *entity)
 {
     qd_tcp_connector_t *c = qd_tcp_connector(qd->server);
     if (!c || load_bridge_config(qd, c->config, entity, true) != 
QD_ERROR_NONE) {
@@ -1326,7 +1326,7 @@ static void close_egress_dispatcher(qdr_tcp_connection_t 
*context)
     qd_timer_schedule(context->activate_timer, 0);
 }
 
-void qd_dispatch_delete_tcp_connector(qd_dispatch_t *qd, void *impl)
+QD_EXPORT void qd_dispatch_delete_tcp_connector(qd_dispatch_t *qd, void *impl)
 {
     qd_tcp_connector_t *ct = (qd_tcp_connector_t*) impl;
     if (ct) {
diff --git a/src/alloc_pool.c b/src/alloc_pool.c
index 971a2df..5087e9e 100644
--- a/src/alloc_pool.c
+++ b/src/alloc_pool.c
@@ -668,7 +668,8 @@ void qd_alloc_finalize(void)
 }
 
 
-qd_error_t qd_entity_refresh_allocator(qd_entity_t* entity, void *impl) {
+QD_EXPORT qd_error_t qd_entity_refresh_allocator(qd_entity_t* entity, void 
*impl)
+{
     qd_alloc_type_t *alloc_type = (qd_alloc_type_t*) impl;
     if (qd_entity_set_string(entity, "typeName", alloc_type->desc->type_name) 
== 0 &&
         qd_entity_set_long(entity, "typeSize", alloc_type->desc->total_size) 
== 0 &&
diff --git a/src/connection_manager.c b/src/connection_manager.c
index 905e335..02e3626 100644
--- a/src/connection_manager.c
+++ b/src/connection_manager.c
@@ -593,7 +593,7 @@ static bool config_sasl_plugin_free(qd_connection_manager_t 
*cm, qd_config_sasl_
 }
 
 
-qd_config_ssl_profile_t *qd_dispatch_configure_ssl_profile(qd_dispatch_t *qd, 
qd_entity_t *entity)
+QD_EXPORT qd_config_ssl_profile_t 
*qd_dispatch_configure_ssl_profile(qd_dispatch_t *qd, qd_entity_t *entity)
 {
     qd_error_clear();
     qd_connection_manager_t *cm = qd->connection_manager;
@@ -651,7 +651,7 @@ qd_config_ssl_profile_t 
*qd_dispatch_configure_ssl_profile(qd_dispatch_t *qd, qd
         return 0;
 }
 
-qd_config_sasl_plugin_t *qd_dispatch_configure_sasl_plugin(qd_dispatch_t *qd, 
qd_entity_t *entity)
+QD_EXPORT qd_config_sasl_plugin_t 
*qd_dispatch_configure_sasl_plugin(qd_dispatch_t *qd, qd_entity_t *entity)
 {
     qd_error_clear();
     qd_connection_manager_t *cm = qd->connection_manager;
@@ -708,7 +708,7 @@ static void log_config(qd_log_source_t *log, 
qd_server_config_t *c, const char *
 }
 
 
-qd_listener_t *qd_dispatch_configure_listener(qd_dispatch_t *qd, qd_entity_t 
*entity)
+QD_EXPORT qd_listener_t *qd_dispatch_configure_listener(qd_dispatch_t *qd, 
qd_entity_t *entity)
 {
     qd_connection_manager_t *cm = qd->connection_manager;
     qd_listener_t *li = qd_server_listener(qd->server);
@@ -737,7 +737,7 @@ qd_listener_t *qd_dispatch_configure_listener(qd_dispatch_t 
*qd, qd_entity_t *en
 }
 
 
-qd_error_t qd_entity_refresh_listener(qd_entity_t* entity, void *impl)
+QD_EXPORT qd_error_t qd_entity_refresh_listener(qd_entity_t* entity, void 
*impl)
 {
     return QD_ERROR_NONE;
 }
@@ -886,7 +886,7 @@ qd_error_t qd_entity_refresh_connector(qd_entity_t* entity, 
void *impl)
 }
 
 
-qd_connector_t *qd_dispatch_configure_connector(qd_dispatch_t *qd, qd_entity_t 
*entity)
+QD_EXPORT qd_connector_t *qd_dispatch_configure_connector(qd_dispatch_t *qd, 
qd_entity_t *entity)
 {
     qd_connection_manager_t *cm = qd->connection_manager;
     qd_connector_t *ct = qd_server_connector(qd->server);
@@ -1038,7 +1038,7 @@ void qd_connection_manager_start(qd_dispatch_t *qd)
 }
 
 
-void qd_connection_manager_delete_listener(qd_dispatch_t *qd, void *impl)
+QD_EXPORT void qd_connection_manager_delete_listener(qd_dispatch_t *qd, void 
*impl)
 {
     qd_listener_t *li = (qd_listener_t*) impl;
     if (li) {
@@ -1054,13 +1054,13 @@ void 
qd_connection_manager_delete_listener(qd_dispatch_t *qd, void *impl)
 }
 
 
-void qd_connection_manager_delete_ssl_profile(qd_dispatch_t *qd, void *impl)
+QD_EXPORT void qd_connection_manager_delete_ssl_profile(qd_dispatch_t *qd, 
void *impl)
 {
     qd_config_ssl_profile_t *ssl_profile = (qd_config_ssl_profile_t*) impl;
     config_ssl_profile_free(qd->connection_manager, ssl_profile);
 }
 
-void qd_connection_manager_delete_sasl_plugin(qd_dispatch_t *qd, void *impl)
+QD_EXPORT void qd_connection_manager_delete_sasl_plugin(qd_dispatch_t *qd, 
void *impl)
 {
     qd_config_sasl_plugin_t *sasl_plugin = (qd_config_sasl_plugin_t*) impl;
     config_sasl_plugin_free(qd->connection_manager, sasl_plugin);
@@ -1077,7 +1077,7 @@ static void deferred_close(void *context, bool discard) {
 // threading: called by management thread while I/O thread may be
 // referencing the qd_connector_t via the qd_connection_t
 //
-void qd_connection_manager_delete_connector(qd_dispatch_t *qd, void *impl)
+QD_EXPORT void qd_connection_manager_delete_connector(qd_dispatch_t *qd, void 
*impl)
 {
     qd_connector_t *ct = (qd_connector_t*) impl;
     if (ct) {
diff --git a/src/dispatch.c b/src/dispatch.c
index d7d6a3a..f19339b 100644
--- a/src/dispatch.c
+++ b/src/dispatch.c
@@ -241,25 +241,25 @@ qd_error_t qd_dispatch_configure_address(qd_dispatch_t 
*qd, qd_entity_t *entity)
     return qd_error_code();
 }
 
-qd_error_t qd_dispatch_configure_link_route(qd_dispatch_t *qd, qd_entity_t 
*entity) {
+QD_EXPORT qd_error_t qd_dispatch_configure_link_route(qd_dispatch_t *qd, 
qd_entity_t *entity) {
     if (!qd->router) return qd_error(QD_ERROR_NOT_FOUND, "No router 
available");
     qd_router_configure_link_route(qd->router, entity);
     return qd_error_code();
 }
 
-qd_error_t qd_dispatch_configure_auto_link(qd_dispatch_t *qd, qd_entity_t 
*entity) {
+QD_EXPORT qd_error_t qd_dispatch_configure_auto_link(qd_dispatch_t *qd, 
qd_entity_t *entity) {
     if (!qd->router) return qd_error(QD_ERROR_NOT_FOUND, "No router 
available");
     qd_router_configure_auto_link(qd->router, entity);
     return qd_error_code();
 }
 
-qd_error_t qd_dispatch_configure_exchange(qd_dispatch_t *qd, qd_entity_t 
*entity) {
+QD_EXPORT qd_error_t qd_dispatch_configure_exchange(qd_dispatch_t *qd, 
qd_entity_t *entity) {
     if (!qd->router) return qd_error(QD_ERROR_NOT_FOUND, "No router 
available");
     qd_router_configure_exchange(qd->router, entity);
     return qd_error_code();
 }
 
-qd_error_t qd_dispatch_configure_binding(qd_dispatch_t *qd, qd_entity_t 
*entity) {
+QD_EXPORT qd_error_t qd_dispatch_configure_binding(qd_dispatch_t *qd, 
qd_entity_t *entity) {
     if (!qd->router) return qd_error(QD_ERROR_NOT_FOUND, "No router 
available");
     qd_router_configure_binding(qd->router, entity);
     return qd_error_code();
@@ -287,23 +287,23 @@ qd_error_t 
qd_dispatch_register_display_name_service(qd_dispatch_t *qd, void *ob
 }
 
 
-long qd_dispatch_policy_c_counts_alloc()
+QD_EXPORT long qd_dispatch_policy_c_counts_alloc()
 {
     return qd_policy_c_counts_alloc();
 }
 
 
-void qd_dispatch_policy_c_counts_free(long ccounts)
+QD_EXPORT void qd_dispatch_policy_c_counts_free(long ccounts)
 {
     qd_policy_c_counts_free(ccounts);
 }
 
-void qd_dispatch_policy_c_counts_refresh(long ccounts, qd_entity_t *entity)
+QD_EXPORT void qd_dispatch_policy_c_counts_refresh(long ccounts, qd_entity_t 
*entity)
 {
     qd_policy_c_counts_refresh(ccounts, entity);
 }
 
-bool qd_dispatch_policy_host_pattern_add(qd_dispatch_t *qd, void *py_obj)
+QD_EXPORT bool qd_dispatch_policy_host_pattern_add(qd_dispatch_t *qd, void 
*py_obj)
 {
     char *hostPattern = py_string_2_c(py_obj);
     bool rc = qd_policy_host_pattern_add(qd->policy, hostPattern);
@@ -311,14 +311,14 @@ bool qd_dispatch_policy_host_pattern_add(qd_dispatch_t 
*qd, void *py_obj)
     return rc;
 }
 
-void qd_dispatch_policy_host_pattern_remove(qd_dispatch_t *qd, void *py_obj)
+QD_EXPORT void qd_dispatch_policy_host_pattern_remove(qd_dispatch_t *qd, void 
*py_obj)
 {
     char *hostPattern = py_string_2_c(py_obj);
     qd_policy_host_pattern_remove(qd->policy, hostPattern);
     free(hostPattern);
 }
 
-char * qd_dispatch_policy_host_pattern_lookup(qd_dispatch_t *qd, void *py_obj)
+QD_EXPORT char * qd_dispatch_policy_host_pattern_lookup(qd_dispatch_t *qd, 
void *py_obj)
 {
     char *hostPattern = py_string_2_c(py_obj);
     char *rc = qd_policy_host_pattern_lookup(qd->policy, hostPattern);
@@ -387,8 +387,8 @@ void qd_dispatch_free(qd_dispatch_t *qd)
 }
 
 
-void qd_dispatch_router_lock(qd_dispatch_t *qd) { 
sys_mutex_lock(qd->router->lock); }
-void qd_dispatch_router_unlock(qd_dispatch_t *qd) { 
sys_mutex_unlock(qd->router->lock); }
+QD_EXPORT void qd_dispatch_router_lock(qd_dispatch_t *qd) { 
sys_mutex_lock(qd->router->lock); }
+QD_EXPORT void qd_dispatch_router_unlock(qd_dispatch_t *qd) { 
sys_mutex_unlock(qd->router->lock); }
 
 qdr_core_t* qd_dispatch_router_core(qd_dispatch_t *qd) {
     return qd->router->router_core;
diff --git a/src/dispatch_private.h b/src/dispatch_private.h
index 21fcc61..d09daec 100644
--- a/src/dispatch_private.h
+++ b/src/dispatch_private.h
@@ -75,7 +75,7 @@ qd_dispatch_t *qd_dispatch_get_dispatch();
  * @param qd The dispatch handle returned by qd_dispatch.
  * @param entity The configuration entity.
  */
-qd_error_t qd_dispatch_configure_router(qd_dispatch_t *qd, qd_entity_t 
*entity);
+QD_EXPORT qd_error_t qd_dispatch_configure_router(qd_dispatch_t *qd, 
qd_entity_t *entity);
 
 /**
  * Prepare Dispatch for operation.  This must be called prior to
@@ -83,12 +83,12 @@ qd_error_t qd_dispatch_configure_router(qd_dispatch_t *qd, 
qd_entity_t *entity);
  *
  * @param qd The dispatch handle returned by qd_dispatch
  */
-qd_error_t qd_dispatch_prepare(qd_dispatch_t *qd);
+QD_EXPORT qd_error_t qd_dispatch_prepare(qd_dispatch_t *qd);
 
 /**
  * Configure an address, must be called after qd_dispatch_prepare
  */
-qd_error_t qd_dispatch_configure_address(qd_dispatch_t *qd, qd_entity_t 
*entity);
+QD_EXPORT qd_error_t qd_dispatch_configure_address(qd_dispatch_t *qd, 
qd_entity_t *entity);
 
 /**
  * Configure a route, must be called after qd_dispatch_prepare
@@ -98,17 +98,17 @@ qd_error_t qd_dispatch_configure_route(qd_dispatch_t *qd, 
qd_entity_t *entity);
 /**
  * Configure security policy, must be called after qd_dispatch_prepare
  */
-qd_error_t qd_dispatch_configure_policy(qd_dispatch_t *qd, qd_entity_t 
*entity);
+QD_EXPORT qd_error_t qd_dispatch_configure_policy(qd_dispatch_t *qd, 
qd_entity_t *entity);
 
 /**
  * Configure security policy manager, must be called after qd_dispatch_prepare
  */
-qd_error_t qd_dispatch_register_policy_manager(qd_dispatch_t *qd, qd_entity_t 
*entity);
+QD_EXPORT qd_error_t qd_dispatch_register_policy_manager(qd_dispatch_t *qd, 
qd_entity_t *entity);
 
 /**
  * Configure display name service, must be called after qd_dispatch_prepare
  */
-qd_error_t qd_dispatch_register_display_name_service(qd_dispatch_t *qd, void 
*object);
+QD_EXPORT qd_error_t qd_dispatch_register_display_name_service(qd_dispatch_t 
*qd, void *object);
 
 /**
  * \brief Configure the logging module from the
@@ -128,7 +128,7 @@ void qd_dispatch_register_entity(qd_dispatch_t *qd, const 
char *type, void *impl
 void qd_dispatch_unregister_entity(qd_dispatch_t *qd, void *impl);
 
 /** Set the agent */
-void qd_dispatch_set_agent(qd_dispatch_t *qd, void *agent);
+QD_EXPORT void qd_dispatch_set_agent(qd_dispatch_t *qd, void *agent);
 
 qdr_core_t* qd_dispatch_router_core(qd_dispatch_t *qd);
 
diff --git a/src/entity_cache.c b/src/entity_cache.c
index 48e2fdb..22b793c 100644
--- a/src/entity_cache.c
+++ b/src/entity_cache.c
@@ -83,7 +83,7 @@ void qd_entity_cache_remove(const char *type, void *object) { 
push_event(REMOVE,
 // Locks the entity cache so entities can be updated safely (prevent entities 
from being deleted.)
 // Do not process any entities if return error code != 0
 // Must call qd_entity_refresh_end when done, regardless of error code.
-qd_error_t qd_entity_refresh_begin(PyObject *list) {
+QD_EXPORT qd_error_t qd_entity_refresh_begin(PyObject *list) {
     if (!event_lock) return QD_ERROR_NONE;    /* Unit tests don't call 
qd_entity_cache_initialize */
     qd_error_clear();
     sys_mutex_lock(event_lock);
@@ -101,6 +101,6 @@ qd_error_t qd_entity_refresh_begin(PyObject *list) {
     return qd_error_code();
 }
 
-void qd_entity_refresh_end() {
+QD_EXPORT void qd_entity_refresh_end() {
     sys_mutex_unlock(event_lock);
 }
diff --git a/src/log.c b/src/log.c
index cac7fbd..0bada29 100644
--- a/src/log.c
+++ b/src/log.c
@@ -467,7 +467,7 @@ void qd_log_impl(qd_log_source_t *source, qd_log_level_t 
level, const char *file
 static PyObject *inc_none() { Py_INCREF(Py_None); return Py_None; }
 
 /// Return the log buffer up to limit as a python list. Called by management 
agent.
-PyObject *qd_log_recent_py(long limit) {
+QD_EXPORT PyObject *qd_log_recent_py(long limit) {
     if (PyErr_Occurred()) return NULL;
     PyObject *list = PyList_New(0);
     PyObject *py_entry = NULL;
@@ -532,7 +532,7 @@ void qd_log_finalize(void) {
     default_log_source = NULL;  // stale value would misconfigure new router 
started again in the same process
 }
 
-qd_error_t qd_log_entity(qd_entity_t *entity)
+QD_EXPORT qd_error_t qd_log_entity(qd_entity_t *entity)
 {
     qd_error_clear();
 
@@ -689,8 +689,7 @@ void qd_format_string(char* buf, int buf_size, const char 
*fmt, ...)
     va_end(args);
 }
 
-
-qd_error_t qd_entity_refresh_logStats(qd_entity_t* entity, void *impl)
+QD_EXPORT qd_error_t qd_entity_refresh_logStats(qd_entity_t* entity, void 
*impl)
 {
     qd_log_source_t *log = (qd_log_source_t*)impl;
     char identity_str[TEXT_MAX];
diff --git a/src/policy.c b/src/policy.c
index 2255806..5830b35 100644
--- a/src/policy.c
+++ b/src/policy.c
@@ -224,7 +224,7 @@ qd_error_t qd_policy_c_counts_refresh(long ccounts, 
qd_entity_t *entity)
 /** Update the statistics in qdrouterd.conf["policy"]
  * @param[in] entity pointer to the policy management object
  **/
-qd_error_t qd_entity_refresh_policy(qd_entity_t* entity, void *unused) {
+QD_EXPORT qd_error_t qd_entity_refresh_policy(qd_entity_t* entity, void 
*unused) {
     // Return global stats
     uint64_t np, nd, nc, nl, nm, nt;
     sys_mutex_lock(stats_lock);
diff --git a/src/router_agent.c b/src/router_agent.c
index 498b9be..1e60ac2 100644
--- a/src/router_agent.c
+++ b/src/router_agent.c
@@ -33,7 +33,7 @@ static const char *qd_router_mode_names[] = {
 };
 ENUM_DEFINE(qd_router_mode, qd_router_mode_names);
 
-qd_error_t qd_entity_refresh_router(qd_entity_t* entity, void *impl) {
+QD_EXPORT qd_error_t qd_entity_refresh_router(qd_entity_t* entity, void *impl) 
{
     qd_dispatch_t *qd = (qd_dispatch_t*) impl;
     qd_router_t *router = qd->router;
     if (qd_entity_set_string(entity, "area", router->router_area) == 0 &&
diff --git a/src/router_node.c b/src/router_node.c
index ba01522..aa38395 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -2136,7 +2136,7 @@ static void CORE_delivery_update(void *context, 
qdr_delivery_t *dlv, uint64_t di
 }
 
 
-void qd_router_setup_late(qd_dispatch_t *qd)
+QD_EXPORT void qd_router_setup_late(qd_dispatch_t *qd)
 {
     qd->router->tracemask   = qd_tracemask();
     qd->router->router_core = qdr_core(qd, qd->router->router_mode, 
qd->router->router_area, qd->router->router_id);

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to