Skip to content

Commit 4e65ad7

Browse files
committed
Fixing bugs in event response and memory
1 parent dc88815 commit 4e65ad7

1 file changed

Lines changed: 35 additions & 32 deletions

File tree

‎src/webui.c‎

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2524,8 +2524,9 @@ const char* webui_get_string_at(webui_event_t* e, size_t index) {
25242524
_webui_log_info("[User] webui_get_string_at([%zu])\n", index);
25252525
#endif
25262526

2527-
// Initialization
2528-
_webui_init();
2527+
// Events only exist while WebUI is initialized
2528+
if (!_webui.initialized)
2529+
return NULL;
25292530

25302531
if (index > WEBUI_MAX_ARG)
25312532
return NULL;
@@ -2555,8 +2556,9 @@ size_t webui_get_count(webui_event_t* e) {
25552556
_webui_log_info("[User] webui_get_count()\n");
25562557
#endif
25572558

2558-
// Initialization
2559-
_webui_init();
2559+
// Events only exist while WebUI is initialized
2560+
if (!_webui.initialized)
2561+
return 0;
25602562

25612563
// Dereference
25622564
_webui_window_t* win = _webui_dereference_win_num(e->window);
@@ -2651,8 +2653,9 @@ size_t webui_get_size_at(webui_event_t* e, size_t index) {
26512653
_webui_log_info("[User] webui_get_size_at([%zu])\n", index);
26522654
#endif
26532655

2654-
// Initialization
2655-
_webui_init();
2656+
// Events only exist while WebUI is initialized
2657+
if (!_webui.initialized)
2658+
return 0;
26562659

26572660
if (index > WEBUI_MAX_ARG)
26582661
return 0;
@@ -2721,8 +2724,9 @@ void webui_return_int(webui_event_t* e, long long int n) {
27212724
_webui_log_info("[User] webui_return_int([%lld])\n", n);
27222725
#endif
27232726

2724-
// Initialization
2725-
_webui_init();
2727+
// Events only exist while WebUI is initialized
2728+
if (!_webui.initialized)
2729+
return;
27262730

27272731
// Dereference
27282732
_webui_window_t* win = _webui_dereference_win_num(e->window);
@@ -2744,8 +2748,9 @@ void webui_return_float(webui_event_t* e, double f) {
27442748
_webui_log_info("[User] webui_return_float([%f])\n", f);
27452749
#endif
27462750

2747-
// Initialization
2748-
_webui_init();
2751+
// Events only exist while WebUI is initialized
2752+
if (!_webui.initialized)
2753+
return;
27492754

27502755
// Dereference
27512756
_webui_window_t* win = _webui_dereference_win_num(e->window);
@@ -2767,21 +2772,21 @@ void webui_return_string(webui_event_t* e, const char* s) {
27672772
_webui_log_info("[User] webui_return_string([%s])\n", s);
27682773
#endif
27692774

2770-
if (_webui_is_empty(s))
2775+
// Events only exist while WebUI is initialized
2776+
if (!_webui.initialized)
27712777
return;
27722778

2773-
// Initialization
2774-
_webui_init();
2775-
27762779
// Dereference
27772780
_webui_window_t* win = _webui_dereference_win_num(e->window);
27782781
if (win == NULL)
27792782
return;
27802783

27812784
// Copy Str
2785+
// An empty string is still a response, it completes an async call
27822786
size_t len = _webui_strlen(s);
27832787
char* buf = (char*)_webui_malloc(len);
2784-
memcpy(buf, s, len);
2788+
if (len > 0)
2789+
memcpy(buf, s, len);
27852790

27862791
// Set response
27872792
_webui_event_set_response(win, e->event_number, buf);
@@ -2813,8 +2818,9 @@ void webui_return_bool(webui_event_t* e, bool b) {
28132818
_webui_log_info("[User] webui_return_bool([%d])\n", b);
28142819
#endif
28152820

2816-
// Initialization
2817-
_webui_init();
2821+
// Events only exist while WebUI is initialized
2822+
if (!_webui.initialized)
2823+
return;
28182824

28192825
// Dereference
28202826
_webui_window_t* win = _webui_dereference_win_num(e->window);
@@ -4795,8 +4801,9 @@ void webui_interface_set_response(size_t window, size_t event_number, const char
47954801
_webui_log_info("[User] webui_interface_set_response() -> Response [%s] \n", response);
47964802
#endif
47974803

4798-
// Initialization
4799-
_webui_init();
4804+
// Events only exist while WebUI is initialized
4805+
if (!_webui.initialized)
4806+
return;
48004807

48014808
// Dereference
48024809
_webui_window_t* win = _webui_dereference_win_num(window);
@@ -4806,7 +4813,8 @@ void webui_interface_set_response(size_t window, size_t event_number, const char
48064813
// Copy the response
48074814
size_t len = _webui_strlen(response);
48084815
char* buf = (char*)_webui_malloc(len);
4809-
WEBUI_STR_COPY_DYN(buf, len, response);
4816+
if (len > 0)
4817+
WEBUI_STR_COPY_DYN(buf, len, response);
48104818

48114819
#ifdef WEBUI_LOG
48124820
_webui_log_info("[User] webui_interface_set_response() -> Internal buffer [%s] \n", buf);
@@ -5092,12 +5100,12 @@ void* webui_interface_get_context(size_t window, size_t event_number) {
50925100
if (win == NULL)
50935101
return NULL;
50945102

5095-
// New Event (Wrapper)
5096-
webui_event_t e;
5097-
e.window = window;
5098-
e.event_number = event_number;
5103+
// Get event inf
5104+
webui_event_inf_t* event_inf = _webui_get_event_inf(win, event_number);
5105+
if (event_inf == NULL)
5106+
return NULL;
50995107

5100-
return webui_get_context(&e);
5108+
return webui_get_context(&event_inf->event);
51015109
}
51025110

51035111
// -- Core's Functions ----------------
@@ -5217,13 +5225,7 @@ static void _webui_free_all_mem(void) {
52175225
_webui_log_debug("[Core]\t\t_webui_free_all_mem()\n");
52185226
#endif
52195227

5220-
_webui_mutex_lock(&_webui.mutex_mem);
5221-
5222-
// Makes sure we run this once
5223-
static bool freed = false;
5224-
if (freed)
5225-
return;
5226-
freed = true;
5228+
_webui_mutex_lock(&_webui.mutex_mem);
52275229

52285230
// Free all pointers in the list
52295231
void * ptr = NULL;
@@ -5284,6 +5286,7 @@ static void * _webui_malloc(size_t size) {
52845286

52855287
// Check
52865288
if (mem == NULL) {
5289+
_webui_mutex_unlock(&_webui.mutex_mem);
52875290
WEBUI_ASSERT("malloc() failed");
52885291
return NULL;
52895292
}

0 commit comments

Comments
 (0)