Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Clang Thread Safety Annotations #212

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions include/qpid/dispatch/internal/thread_annotations.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,7 @@
#define TA_RET_CAP(x) THREAD_ANNOTATION(lock_returned(x))
#define TA_SCOPED_CAP THREAD_ANNOTATION(scoped_lockable)
#define TA_NO_THREAD_SAFETY_ANALYSIS THREAD_ANNOTATION(no_thread_safety_analysis)

typedef void const * const core_thread_capability_t TA_CAP("core_thread");

extern core_thread_capability_t core_thread_capability;
9 changes: 5 additions & 4 deletions include/qpid/dispatch/router_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,13 @@ ENUM_DECLARE(qd_router_mode);
/**
* Allocate and start an instance of the router core module.
*/
qdr_core_t *qdr_core(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area, const char *id);
qdr_core_t *qdr_core(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area, const char *id)
TA_RET_CAP(core_thread_capability);

/**
* Stop and deallocate an instance of the router core.
*/
void qdr_core_free(qdr_core_t *core);
void qdr_core_free(qdr_core_t *core) TA_REQ(core_thread_capability);

/**
******************************************************************************
Expand Down Expand Up @@ -363,8 +364,8 @@ void qdr_manage_update(qdr_core_t *core, void *context, qd_router_entity_type_t

qdr_query_t *qdr_manage_query(qdr_core_t *core, void *context, qd_router_entity_type_t type,
qd_parsed_field_t *attribute_names, qd_composed_field_t *body,
uint64_t in_conn);
void qdr_query_add_attribute_names(qdr_query_t *query);
uint64_t in_conn) TA_REQ(core_thread_capability);
void qdr_query_add_attribute_names(qdr_query_t *query) TA_REQ(core_thread_capability);
void qdr_query_get_first(qdr_query_t *query, int offset);
void qdr_query_get_next(qdr_query_t *query);
void qdr_query_free(qdr_query_t *query);
Expand Down
6 changes: 3 additions & 3 deletions src/adaptors/http_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,13 @@ QD_EXPORT void qd_dispatch_delete_http_connector(qd_dispatch_t *qd, void *impl);
QD_EXPORT qd_error_t qd_entity_refresh_httpConnector(qd_entity_t* entity, void *impl);

// Management interfaces for retrieval of HttpRequestInfo entities
void qdra_http_request_info_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_http_request_info_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_http_request_info_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_http_request_info_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_http_request_info_get_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
const char *qdr_http_request_info_columns[]);
const char *qdr_http_request_info_columns[]) TA_REQ(core_thread_capability);

#define QDR_HTTP_REQUEST_INFO_COLUMN_COUNT 11
extern const char *qdr_http_request_info_columns[QDR_HTTP_REQUEST_INFO_COLUMN_COUNT + 1];
Expand Down
6 changes: 3 additions & 3 deletions src/adaptors/tcp/tcp_adaptor.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,13 @@ struct qd_tcp_connector_t
DEQ_DECLARE(qd_tcp_connector_t, qd_tcp_connector_list_t);
ALLOC_DECLARE(qd_tcp_connector_t);

void qdra_tcp_connection_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_tcp_connection_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_tcp_connection_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_tcp_connection_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_tcp_connection_get_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
const char *qdr_tcp_connection_columns[]);
const char *qdr_tcp_connection_columns[]) TA_REQ(core_thread_capability);

#define QDR_TCP_CONNECTION_COLUMN_COUNT 10
extern const char *qdr_tcp_connection_columns[QDR_TCP_CONNECTION_COLUMN_COUNT + 1];
Expand Down
6 changes: 3 additions & 3 deletions src/router_core/address_watch.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ ALLOC_DEFINE(qdr_address_watch_t);

static void qdr_watch_invoker(qdr_core_t *core, qdr_general_work_t *work, bool discard);
static void qdr_watch_cancel_invoker(qdr_core_t *core, qdr_general_work_t *work, bool discard);
static void qdr_core_watch_address_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_core_unwatch_address_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_address_watch_free_CT(qdr_core_t *core, qdr_address_watch_t *watch);
static void qdr_core_watch_address_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdr_core_unwatch_address_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdr_address_watch_free_CT(qdr_core_t *core, qdr_address_watch_t *watch) TA_REQ(core_thread_capability);

//==================================================================================
// Core Interface Functions
Expand Down
4 changes: 2 additions & 2 deletions src/router_core/address_watch.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ DEQ_DECLARE(qdr_address_watch_t, qdr_address_watch_list_t);
* @param core Pointer to the router core state
* @param addr Pointer to the address record that was modified
*/
void qdr_trigger_address_watch_CT(qdr_core_t *core, qdr_address_t *addr);
void qdr_trigger_address_watch_CT(qdr_core_t *core, qdr_address_t *addr) TA_REQ(core_thread_capability);

void qdr_address_watch_shutdown(qdr_core_t *core);
void qdr_address_watch_shutdown(qdr_core_t *core) TA_REQ(core_thread_capability);

#endif
18 changes: 9 additions & 9 deletions src/router_core/agent.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@

#include "qpid/dispatch/amqp.h"

static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_manage_update_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdr_manage_update_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);

ALLOC_DECLARE(qdr_query_t);
ALLOC_DEFINE(qdr_query_t);
Expand Down Expand Up @@ -110,10 +110,10 @@ qdr_query_t *qdr_query(qdr_core_t *core,
return query;
}

static void qdrh_query_get_first_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdrh_query_get_next_CT(qdr_core_t *core, qdr_action_t *action, bool discard);
static void qdr_agent_emit_columns(qdr_query_t *query, const char *qdr_columns[], int column_count);
static void qdr_agent_set_columns(qdr_query_t *query, qd_parsed_field_t *attribute_names, const char *qdr_columns[], int column_count);
static void qdrh_query_get_first_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdrh_query_get_next_CT(qdr_core_t *core, qdr_action_t *action, bool discard) TA_REQ(core_thread_capability);
static void qdr_agent_emit_columns(qdr_query_t *query, const char *qdr_columns[], int column_count) TA_REQ(core_thread_capability);
static void qdr_agent_set_columns(qdr_query_t *query, qd_parsed_field_t *attribute_names, const char *qdr_columns[], int column_count) TA_REQ(core_thread_capability);

//==================================================================================
// Interface Functions
Expand Down Expand Up @@ -387,7 +387,7 @@ void qdr_manage_handler(qdr_core_t *core, qdr_manage_response_t response_handler
// In-Thread Functions
//==================================================================================

static void qdr_agent_forbidden(qdr_core_t *core, qdr_query_t *query, bool op_query)
static void qdr_agent_forbidden(qdr_core_t *core, qdr_query_t *query, bool op_query) TA_REQ(core_thread_capability)
{
query->status = QD_AMQP_FORBIDDEN;
if (query->body && !op_query)
Expand Down
7 changes: 3 additions & 4 deletions src/router_core/agent_address.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,14 @@

#include "router_core_private.h"

void qdra_address_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_address_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_address_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_address_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);

void qdra_address_get_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
const char *qdr_address_columns[]);

const char *qdr_address_columns[]) TA_REQ(core_thread_capability);

#define QDR_ADDRESS_COLUMN_COUNT 21

Expand Down
14 changes: 7 additions & 7 deletions src/router_core/agent_config_address.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,20 @@

#include "router_core_private.h"

void qdra_config_address_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_config_address_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_config_address_create_CT(qdr_core_t *core, qd_iterator_t *name, qdr_query_t *query, qd_parsed_field_t *in_body);
void qdra_config_address_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body);
void qdra_config_address_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_config_address_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_config_address_create_CT(qdr_core_t *core, qd_iterator_t *name, qdr_query_t *query, qd_parsed_field_t *in_body) TA_REQ(core_thread_capability);
void qdra_config_address_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body) TA_REQ(core_thread_capability);
void qdra_config_address_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_iterator_t *name,
qd_iterator_t *identity);
qd_iterator_t *identity) TA_REQ(core_thread_capability);
void qdra_config_address_get_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
const char *qdr_config_address_columns[]);
const char *qdr_config_address_columns[]) TA_REQ(core_thread_capability);
char *qdra_config_address_validate_pattern_CT(qd_parsed_field_t *pattern_field,
bool is_prefix,
const char **error);
const char **error) TA_REQ(core_thread_capability);
#define QDR_CONFIG_ADDRESS_COLUMN_COUNT 7

extern const char *qdr_config_address_columns[QDR_CONFIG_ADDRESS_COLUMN_COUNT + 1];
Expand Down
2 changes: 1 addition & 1 deletion src/router_core/agent_config_auto_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ static void qdr_manage_advance_config_auto_link_CT(qdr_query_t *query, qdr_auto_
}


void qdra_config_auto_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
void qdra_config_auto_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability)
{
//
// Queries that get this far will always succeed.
Expand Down
12 changes: 6 additions & 6 deletions src/router_core/agent_config_auto_link.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@

#include "router_core_private.h"

void qdra_config_auto_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_config_auto_link_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_config_auto_link_create_CT(qdr_core_t *core, qd_iterator_t *name, qdr_query_t *query, qd_parsed_field_t *in_body);
void qdra_config_auto_link_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body);
void qdra_config_auto_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_config_auto_link_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_config_auto_link_create_CT(qdr_core_t *core, qd_iterator_t *name, qdr_query_t *query, qd_parsed_field_t *in_body) TA_REQ(core_thread_capability);
void qdra_config_auto_link_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body) TA_REQ(core_thread_capability);
void qdra_config_auto_link_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_iterator_t *name,
qd_iterator_t *identity);
qd_iterator_t *identity) TA_REQ(core_thread_capability);
void qdra_config_auto_link_get_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
const char *qdr_config_auto_link_columns[]);
const char *qdr_config_auto_link_columns[]) TA_REQ(core_thread_capability);
#define QDR_CONFIG_AUTO_LINK_COLUMN_COUNT 14

extern const char *qdr_config_auto_link_columns[QDR_CONFIG_AUTO_LINK_COLUMN_COUNT + 1];
Expand Down
17 changes: 10 additions & 7 deletions src/router_core/agent_connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,10 @@ static void qd_get_next_pn_data(pn_data_t **data, const char **d, int *d1)
break;
}
}
}
}


static void qdr_connection_insert_column_CT(qdr_core_t *core, qdr_connection_t *conn, int col, qd_composed_field_t *body, bool as_map)
static void qdr_connection_insert_column_CT(qdr_core_t *core, qdr_connection_t *conn, int col, qd_composed_field_t *body, bool as_map) TA_REQ(core_thread_capability)
{
char id_str[100];
const char *text = 0;
Expand Down Expand Up @@ -174,7 +174,7 @@ static void qdr_connection_insert_column_CT(qdr_core_t *core, qdr_connection_t *
break;

case QDR_CONNECTION_SASL_MECHANISMS:
if (conn->connection_info->sasl_mechanisms)
if (conn->connection_info->sasl_mechanisms)
qd_compose_insert_string(body, conn->connection_info->sasl_mechanisms);
else
qd_compose_insert_null(body);
Expand Down Expand Up @@ -319,7 +319,7 @@ static void qdr_connection_insert_column_CT(qdr_core_t *core, qdr_connection_t *
}


static void qdr_agent_write_connection_CT(qdr_core_t *core, qdr_query_t *query, qdr_connection_t *conn)
static void qdr_agent_write_connection_CT(qdr_core_t *core, qdr_query_t *query, qdr_connection_t *conn) TA_REQ(core_thread_capability)
{
qd_composed_field_t *body = query->body;

Expand Down Expand Up @@ -427,7 +427,7 @@ void qdra_connection_get_next_CT(qdr_core_t *core, qdr_query_t *query)
static void qdr_manage_write_connection_map_CT(qdr_core_t *core,
qdr_connection_t *conn,
qd_composed_field_t *body,
const char *qdr_connection_columns[])
const char *qdr_connection_columns[]) TA_REQ(core_thread_capability)
{
qd_compose_start_map(body);

Expand All @@ -451,7 +451,7 @@ static qdr_connection_t *_find_conn_CT(qdr_core_t *core, uint64_t conn_id)
}


static qdr_connection_t *qdr_connection_find_by_identity_CT(qdr_core_t *core, qd_iterator_t *identity)
static qdr_connection_t *qdr_connection_find_by_identity_CT(qdr_core_t *core, qd_iterator_t *identity) TA_REQ(core_thread_capability)
{
if (!identity)
return 0;
Expand Down Expand Up @@ -518,7 +518,10 @@ static void qdra_connection_set_bad_request(qdr_query_t *query)
}


static void qdra_connection_update_set_status(qdr_core_t *core, qdr_query_t *query, qdr_connection_t *conn, qd_parsed_field_t *admin_state)
static void qdra_connection_update_set_status(qdr_core_t *core,
qdr_query_t *query,
qdr_connection_t *conn,
qd_parsed_field_t *admin_state) TA_REQ(core_thread_capability)
{
if (conn) {
qd_iterator_t *admin_status_iter = qd_parse_raw(admin_state);
Expand Down
8 changes: 4 additions & 4 deletions src/router_core/agent_connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,19 @@

#include "router_core_private.h"

void qdra_connection_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_connection_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_connection_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_connection_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_connection_get_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
const char *qdr_connection_columns[]);
const char *qdr_connection_columns[]) TA_REQ(core_thread_capability);

void qdra_connection_update_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
qd_parsed_field_t *in_body);
qd_parsed_field_t *in_body) TA_REQ(core_thread_capability);

#define QDR_CONNECTION_COLUMN_COUNT 25
extern const char *qdr_connection_columns[QDR_CONNECTION_COLUMN_COUNT + 1];
Expand Down
6 changes: 3 additions & 3 deletions src/router_core/agent_link.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@

#include "router_core_private.h"

void qdra_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_link_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_link_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_link_update_CT(qdr_core_t *core,
qd_iterator_t *name,
qd_iterator_t *identity,
qdr_query_t *query,
qd_parsed_field_t *in_body);
qd_parsed_field_t *in_body) TA_REQ(core_thread_capability);

#define QDR_LINK_COLUMN_COUNT 30

Expand Down
6 changes: 3 additions & 3 deletions src/router_core/agent_router.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@

extern const char *qdr_router_columns[QDR_ROUTER_COLUMN_COUNT + 1];

void qdra_router_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
void qdra_router_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_router_get_next_CT(qdr_core_t *core, qdr_query_t *query);
void qdra_router_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset) TA_REQ(core_thread_capability);
void qdra_router_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);
void qdra_router_get_next_CT(qdr_core_t *core, qdr_query_t *query) TA_REQ(core_thread_capability);

#endif
Loading
Loading