#endif
// Execute the handler
#if CONFIG_ESP_EVENT_POST_FROM_ISR
- (*(handler->handler))(handler->arg, post.base, post.id, post.data_allocd ? post.data.ptr : &post.data.val);
-#else
+ void* data_ptr = NULL;
+
+ if (post.data_set) {
+ if (post.data_allocated) {
+ data_ptr = post.data.ptr;
+ } else {
+ data_ptr = &post.data.val;
+ }
+ }
+
+ (*(handler->handler))(handler->arg, post.base, post.id, data_ptr);
+#else
(*(handler->handler))(handler->arg, post.base, post.id, post.data);
#endif
static void inline __attribute__((always_inline)) post_instance_delete(esp_event_post_instance_t* post)
{
#if CONFIG_ESP_EVENT_POST_FROM_ISR
- if (post->data_allocd && post->data.ptr) {
+ if (post->data_allocated && post->data.ptr) {
free(post->data.ptr);
}
#else
esp_event_loop_instance_t* loop = (esp_event_loop_instance_t*) event_loop;
esp_event_post_instance_t post;
- memset((void*)(&(post.data)), 0, sizeof(post.data));
+ memset((void*)(&post), 0, sizeof(post));
if (event_data != NULL && event_data_size != 0) {
- // Make persistent copy of event data on heap.
- void* event_data_copy = calloc(1, event_data_size);
+#if CONFIG_ESP_EVENT_POST_FROM_ISR
+ if(event_data_size > sizeof(post.data.val)) {
+#endif
+ // Make persistent copy of event data on heap.
+ void* event_data_copy = calloc(1, event_data_size);
- if (event_data_copy == NULL) {
- return ESP_ERR_NO_MEM;
- }
+ if (event_data_copy == NULL) {
+ return ESP_ERR_NO_MEM;
+ }
- memcpy(event_data_copy, event_data, event_data_size);
+ memcpy(event_data_copy, event_data, event_data_size);
#if CONFIG_ESP_EVENT_POST_FROM_ISR
- post.data.ptr = event_data_copy;
- post.data_allocd = true;
+ post.data.ptr = event_data_copy;
+ post.data_allocated = true;
+ } else {
+ memcpy(&post.data.val, event_data, event_data_size);
+ post.data_allocated = false;
+ }
+ post.data_set = true;
#else
post.data = event_data_copy;
#endif
esp_event_loop_instance_t* loop = (esp_event_loop_instance_t*) event_loop;
esp_event_post_instance_t post;
- memset((void*)(&(post.data)), 0, sizeof(post.data));
+ memset((void*)(&post), 0, sizeof(post));
if (event_data_size > sizeof(post.data.val)) {
return ESP_ERR_INVALID_ARG;
if (event_data != NULL && event_data_size != 0) {
memcpy((void*)(&(post.data.val)), event_data, event_data_size);
- post.data_allocd = false;
+ post.data_allocated = false;
+ post.data_set = true;
}
post.base = event_base;
post.id = event_id;