Skip to content

Commit

Permalink
Fix compilation warnings when using LTO
Browse files Browse the repository at this point in the history
Rename structures to avoid compilation warning when using LTO compilation flags:

```
build_flags             =  -flto=auto
build_unflags           =  -fno-lto
```

Warnings are caused by a conflict with structure names in AsyncUDP:

```
/Users/mat/.platformio/packages/framework-arduinoespressif32-src-77c8e93767360b28deee4aedf5d0a1ab/libraries/AsyncUDP/src/AsyncUDP.cpp:161:3: warning: type 'struct lwip_event_packet_t' violates the C++ One Definition Rule [-Wodr]
  161 | } lwip_event_packet_t;
      |   ^
.pio/libdeps/oss-esp32/AsyncTCP/src/AsyncTCP.cpp:121:3: note: a different type is defined in another translation unit
  121 | } lwip_event_packet_t;
      |   ^
/Users/mat/.platformio/packages/framework-arduinoespressif32-src-77c8e93767360b28deee4aedf5d0a1ab/libraries/AsyncUDP/src/AsyncUDP.cpp:155:9: note: the first difference of corresponding definitions is field 'arg'
  155 |   void *arg;
      |         ^
.pio/libdeps/oss-esp32/AsyncTCP/src/AsyncTCP.cpp:87:18: note: a field with different name is defined in another translation unit
   87 |     lwip_event_t event;
      |                  ^
```
  • Loading branch information
mathieucarbou committed Jan 25, 2025
1 parent 3838c22 commit e285ff6
Showing 1 changed file with 20 additions and 20 deletions.
40 changes: 20 additions & 20 deletions src/AsyncTCP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@ typedef enum {
LWIP_TCP_ACCEPT,
LWIP_TCP_CONNECTED,
LWIP_TCP_DNS
} lwip_event_t;
} lwip_tcp_event_t;

typedef struct {
lwip_event_t event;
lwip_tcp_event_t event;
void* arg;
union {
struct {
Expand Down Expand Up @@ -118,7 +118,7 @@ typedef struct {
ip_addr_t addr;
} dns;
};
} lwip_event_packet_t;
} lwip_tcp_event_packet_t;

static QueueHandle_t _async_queue;
static TaskHandle_t _async_service_task_handle = NULL;
Expand All @@ -137,23 +137,23 @@ static uint32_t _closed_index = []() {

static inline bool _init_async_event_queue() {
if (!_async_queue) {
_async_queue = xQueueCreate(CONFIG_ASYNC_TCP_QUEUE_SIZE, sizeof(lwip_event_packet_t*));
_async_queue = xQueueCreate(CONFIG_ASYNC_TCP_QUEUE_SIZE, sizeof(lwip_tcp_event_packet_t*));
if (!_async_queue) {
return false;
}
}
return true;
}

static inline bool _send_async_event(lwip_event_packet_t** e, TickType_t wait = portMAX_DELAY) {
static inline bool _send_async_event(lwip_tcp_event_packet_t** e, TickType_t wait = portMAX_DELAY) {
return _async_queue && xQueueSend(_async_queue, e, wait) == pdPASS;
}

static inline bool _prepend_async_event(lwip_event_packet_t** e, TickType_t wait = portMAX_DELAY) {
static inline bool _prepend_async_event(lwip_tcp_event_packet_t** e, TickType_t wait = portMAX_DELAY) {
return _async_queue && xQueueSendToFront(_async_queue, e, wait) == pdPASS;
}

static inline bool _get_async_event(lwip_event_packet_t** e) {
static inline bool _get_async_event(lwip_tcp_event_packet_t** e) {
if (!_async_queue) {
return false;
}
Expand All @@ -178,7 +178,7 @@ static inline bool _get_async_event(lwip_event_packet_t** e) {
It won't be effective if user would run multiple simultaneous long running callbacks due to message interleaving.
todo: implement some kind of fair dequeing or (better) simply punish user for a bad designed callbacks by resetting hog connections
*/
lwip_event_packet_t* next_pkt = NULL;
lwip_tcp_event_packet_t* next_pkt = NULL;
while (xQueuePeek(_async_queue, &next_pkt, 0) == pdPASS) {
if (next_pkt->arg == (*e)->arg && next_pkt->event == LWIP_TCP_POLL) {
if (xQueueReceive(_async_queue, &next_pkt, 0) == pdPASS) {
Expand Down Expand Up @@ -219,8 +219,8 @@ static bool _remove_events_with_arg(void* arg) {
return false;
}

lwip_event_packet_t* first_packet = NULL;
lwip_event_packet_t* packet = NULL;
lwip_tcp_event_packet_t* first_packet = NULL;
lwip_tcp_event_packet_t* packet = NULL;

// figure out which is the first non-matching packet so we can keep the order
while (!first_packet) {
Expand Down Expand Up @@ -261,7 +261,7 @@ static bool _remove_events_with_arg(void* arg) {
return true;
}

static void _handle_async_event(lwip_event_packet_t* e) {
static void _handle_async_event(lwip_tcp_event_packet_t* e) {
if (e->arg == NULL) {
// do nothing when arg is NULL
// ets_printf("event arg == NULL: 0x%08x\n", e->recv.pcb);
Expand Down Expand Up @@ -301,7 +301,7 @@ static void _async_service_task(void* pvParameters) {
log_w("Failed to add async task to WDT");
}
#endif
lwip_event_packet_t* packet = NULL;
lwip_tcp_event_packet_t* packet = NULL;
for (;;) {
if (_get_async_event(&packet)) {
_handle_async_event(packet);
Expand Down Expand Up @@ -362,7 +362,7 @@ static bool _start_async_task() {
* */

static int8_t _tcp_clear_events(void* arg) {
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->event = LWIP_TCP_CLEAR;
e->arg = arg;
if (!_prepend_async_event(&e)) {
Expand All @@ -373,7 +373,7 @@ static int8_t _tcp_clear_events(void* arg) {

static int8_t _tcp_connected(void* arg, tcp_pcb* pcb, int8_t err) {
// ets_printf("+C: 0x%08x\n", pcb);
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->event = LWIP_TCP_CONNECTED;
e->arg = arg;
e->connected.pcb = pcb;
Expand All @@ -393,7 +393,7 @@ static int8_t _tcp_poll(void* arg, struct tcp_pcb* pcb) {
}

// ets_printf("+P: 0x%08x\n", pcb);
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->event = LWIP_TCP_POLL;
e->arg = arg;
e->poll.pcb = pcb;
Expand All @@ -405,7 +405,7 @@ static int8_t _tcp_poll(void* arg, struct tcp_pcb* pcb) {
}

static int8_t _tcp_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* pb, int8_t err) {
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->arg = arg;
if (pb) {
// ets_printf("+R: 0x%08x\n", pcb);
Expand All @@ -429,7 +429,7 @@ static int8_t _tcp_recv(void* arg, struct tcp_pcb* pcb, struct pbuf* pb, int8_t

static int8_t _tcp_sent(void* arg, struct tcp_pcb* pcb, uint16_t len) {
// ets_printf("+S: 0x%08x\n", pcb);
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->event = LWIP_TCP_SENT;
e->arg = arg;
e->sent.pcb = pcb;
Expand All @@ -442,7 +442,7 @@ static int8_t _tcp_sent(void* arg, struct tcp_pcb* pcb, uint16_t len) {

static void _tcp_error(void* arg, int8_t err) {
// ets_printf("+E: 0x%08x\n", arg);
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->event = LWIP_TCP_ERROR;
e->arg = arg;
e->error.err = err;
Expand All @@ -452,7 +452,7 @@ static void _tcp_error(void* arg, int8_t err) {
}

static void _tcp_dns_found(const char* name, struct ip_addr* ipaddr, void* arg) {
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
// ets_printf("+DNS: name=%s ipaddr=0x%08x arg=%x\n", name, ipaddr, arg);
e->event = LWIP_TCP_DNS;
e->arg = arg;
Expand All @@ -469,7 +469,7 @@ static void _tcp_dns_found(const char* name, struct ip_addr* ipaddr, void* arg)

// Used to switch out from LwIP thread
static int8_t _tcp_accept(void* arg, AsyncClient* client) {
lwip_event_packet_t* e = (lwip_event_packet_t*)malloc(sizeof(lwip_event_packet_t));
lwip_tcp_event_packet_t* e = (lwip_tcp_event_packet_t*)malloc(sizeof(lwip_tcp_event_packet_t));
e->event = LWIP_TCP_ACCEPT;
e->arg = arg;
e->accept.client = client;
Expand Down

0 comments on commit e285ff6

Please sign in to comment.