You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2019/11/26 14:15:20 UTC
[qpid-proton] 01/02: PROTON-2140: Better packing of some structs -
Small but worthwhile gain - Store enums as uint8_t as they don't use more
bits than this - Rearrange some structs to eliminate holes
This is an automated email from the ASF dual-hosted git repository.
astitcher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 98c23470142237b81071cd4ad523db7641f6ba16
Author: Andrew Stitcher <as...@apache.org>
AuthorDate: Mon Nov 25 19:35:27 2019 -0500
PROTON-2140: Better packing of some structs
- Small but worthwhile gain
- Store enums as uint8_t as they don't use more bits than this
- Rearrange some structs to eliminate holes
---
c/include/proton/cid.h | 2 --
c/src/core/engine-internal.h | 35 +++++++++++++++++------------------
c/src/core/engine.c | 14 +++++++-------
c/src/core/transport.c | 2 +-
4 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/c/include/proton/cid.h b/c/include/proton/cid.h
index e0766a0..ca08356 100644
--- a/c/include/proton/cid.h
+++ b/c/include/proton/cid.h
@@ -40,8 +40,6 @@ typedef enum {
CID_pn_collector,
CID_pn_event,
- CID_pn_encoder,
- CID_pn_decoder,
CID_pn_data,
CID_pn_connection,
diff --git a/c/src/core/engine-internal.h b/c/src/core/engine-internal.h
index a115b1a..b8906eb 100644
--- a/c/src/core/engine-internal.h
+++ b/c/src/core/engine-internal.h
@@ -42,16 +42,16 @@ struct pn_condition_t {
};
struct pn_endpoint_t {
- pn_endpoint_type_t type;
- pn_state_t state;
- pn_error_t *error;
pn_condition_t condition;
pn_condition_t remote_condition;
+ pn_error_t *error;
pn_endpoint_t *endpoint_next;
pn_endpoint_t *endpoint_prev;
pn_endpoint_t *transport_next;
pn_endpoint_t *transport_prev;
int refcount; // when this hits zero we generate a final event
+ uint8_t state;
+ uint8_t type;
bool modified;
bool freed;
bool referenced;
@@ -78,26 +78,25 @@ typedef struct {
} pn_link_state_t;
typedef struct {
- // XXX: stop using negative numbers
- uint16_t local_channel;
- uint16_t remote_channel;
- bool incoming_init;
pn_delivery_map_t incoming;
pn_delivery_map_t outgoing;
+ pn_hash_t *local_handles;
+ pn_hash_t *remote_handles;
+ uint64_t disp_code;
pn_sequence_t incoming_transfer_count;
pn_sequence_t incoming_window;
pn_sequence_t remote_incoming_window;
pn_sequence_t outgoing_transfer_count;
pn_sequence_t outgoing_window;
- pn_hash_t *local_handles;
- pn_hash_t *remote_handles;
-
- uint64_t disp_code;
- bool disp_settled;
- bool disp_type;
pn_sequence_t disp_first;
pn_sequence_t disp_last;
+ // XXX: stop using negative numbers
+ uint16_t local_channel;
+ uint16_t remote_channel;
+ bool incoming_init;
bool disp;
+ bool disp_settled;
+ bool disp_type;
} pn_session_state_t;
typedef struct pn_io_layer_t {
@@ -253,6 +252,7 @@ struct pn_connection_t {
struct pn_session_t {
pn_endpoint_t endpoint;
+ pn_session_state_t state;
pn_connection_t *connection; // reference counted
pn_list_t *links;
pn_list_t *freed;
@@ -263,7 +263,6 @@ struct pn_session_t {
pn_sequence_t incoming_deliveries;
pn_sequence_t outgoing_deliveries;
pn_sequence_t outgoing_window;
- pn_session_state_t state;
};
struct pn_terminus_t {
@@ -272,11 +271,11 @@ struct pn_terminus_t {
pn_data_t *capabilities;
pn_data_t *outcomes;
pn_data_t *filter;
- pn_durability_t durability;
- pn_expiry_policy_t expiry_policy;
pn_seconds_t timeout;
- pn_terminus_type_t type;
- pn_distribution_mode_t distribution_mode;
+ uint8_t durability;
+ uint8_t expiry_policy;
+ uint8_t type;
+ uint8_t distribution_mode;
bool has_expiry_policy;
bool dynamic;
};
diff --git a/c/src/core/engine.c b/c/src/core/engine.c
index 3c3c24c..6767b28 100644
--- a/c/src/core/engine.c
+++ b/c/src/core/engine.c
@@ -75,7 +75,7 @@ static void pn_endpoint_open(pn_endpoint_t *endpoint)
PN_SET_LOCAL(endpoint->state, PN_LOCAL_ACTIVE);
pn_connection_t *conn = pni_ep_get_connection(endpoint);
pn_collector_put(conn->collector, PN_OBJECT, endpoint,
- endpoint_event(endpoint->type, true));
+ endpoint_event((pn_endpoint_type_t) endpoint->type, true));
pn_modified(conn, endpoint, true);
}
}
@@ -86,7 +86,7 @@ static void pn_endpoint_close(pn_endpoint_t *endpoint)
PN_SET_LOCAL(endpoint->state, PN_LOCAL_CLOSED);
pn_connection_t *conn = pni_ep_get_connection(endpoint);
pn_collector_put(conn->collector, PN_OBJECT, endpoint,
- endpoint_event(endpoint->type, false));
+ endpoint_event((pn_endpoint_type_t) endpoint->type, false));
pn_modified(conn, endpoint, true);
}
}
@@ -445,7 +445,7 @@ void pn_ep_decref(pn_endpoint_t *endpoint)
endpoint->refcount--;
if (endpoint->refcount == 0) {
pn_connection_t *conn = pni_ep_get_connection(endpoint);
- pn_collector_put(conn->collector, PN_OBJECT, endpoint, pn_final_type(endpoint->type));
+ pn_collector_put(conn->collector, PN_OBJECT, endpoint, pn_final_type((pn_endpoint_type_t) endpoint->type));
}
}
@@ -1236,7 +1236,7 @@ int pn_terminus_set_type(pn_terminus_t *terminus, pn_terminus_type_t type)
pn_terminus_type_t pn_terminus_get_type(pn_terminus_t *terminus)
{
- return terminus ? terminus->type : (pn_terminus_type_t) 0;
+ return (pn_terminus_type_t) (terminus ? terminus->type : 0);
}
const char *pn_terminus_get_address(pn_terminus_t *terminus)
@@ -1253,7 +1253,7 @@ int pn_terminus_set_address(pn_terminus_t *terminus, const char *address)
pn_durability_t pn_terminus_get_durability(pn_terminus_t *terminus)
{
- return terminus ? terminus->durability : (pn_durability_t) 0;
+ return (pn_durability_t) (terminus ? terminus->durability : 0);
}
int pn_terminus_set_durability(pn_terminus_t *terminus, pn_durability_t durability)
@@ -1265,7 +1265,7 @@ int pn_terminus_set_durability(pn_terminus_t *terminus, pn_durability_t durabili
pn_expiry_policy_t pn_terminus_get_expiry_policy(pn_terminus_t *terminus)
{
- return terminus ? terminus->expiry_policy : (pn_expiry_policy_t) 0;
+ return (pn_expiry_policy_t) (terminus ? terminus->expiry_policy : 0);
}
bool pn_terminus_has_expiry_policy(const pn_terminus_t *terminus)
@@ -1327,7 +1327,7 @@ pn_data_t *pn_terminus_filter(pn_terminus_t *terminus)
pn_distribution_mode_t pn_terminus_get_distribution_mode(const pn_terminus_t *terminus)
{
- return terminus ? terminus->distribution_mode : PN_DIST_MODE_UNSPECIFIED;
+ return terminus ? (pn_distribution_mode_t) terminus->distribution_mode : PN_DIST_MODE_UNSPECIFIED;
}
int pn_terminus_set_distribution_mode(pn_terminus_t *terminus, pn_distribution_mode_t m)
diff --git a/c/src/core/transport.c b/c/src/core/transport.c
index 0a930ae..ee00ad2 100644
--- a/c/src/core/transport.c
+++ b/c/src/core/transport.c
@@ -2041,7 +2041,7 @@ static int pni_process_link_setup(pn_transport_t *transport, pn_endpoint_t *endp
!(endpoint->state & PN_LOCAL_UNINIT) && state->local_handle == (uint32_t) -1)
{
pni_map_local_handle(link);
- const pn_distribution_mode_t dist_mode = link->source.distribution_mode;
+ const pn_distribution_mode_t dist_mode = (pn_distribution_mode_t) link->source.distribution_mode;
if (link->target.type == PN_COORDINATOR) {
int err = pn_post_frame(transport, AMQP_FRAME_TYPE, ssn_state->local_channel,
"DL[SIoBB?DL[SIsIoC?sCnCC]DL[C]nnI]", ATTACH,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org