Skip to content

Commit 5273ef3

Browse files
committed
Fix internal mem alloc (Mem debug print improvement)
1 parent dc82dab commit 5273ef3

File tree

1 file changed

+30
-18
lines changed

1 file changed

+30
-18
lines changed

src/webui.c

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ typedef struct _webui_core_t {
382382
bool initialized;
383383
char* executable_path;
384384
void * ptr_list[WEBUI_MAX_IDS * 2];
385-
size_t ptr_position;
385+
size_t ptr_last_pos;
386386
size_t ptr_size[WEBUI_MAX_IDS * 2];
387387
size_t current_browser;
388388
_webui_window_t* wins[WEBUI_MAX_IDS];
@@ -3690,8 +3690,7 @@ static bool _webui_ptr_exist(void * ptr) {
36903690
if (ptr == NULL)
36913691
return false;
36923692

3693-
for (size_t i = 0; i < _webui.ptr_position; i++) {
3694-
3693+
for (size_t i = 0; i < _webui.ptr_last_pos; i++) {
36953694
if (_webui.ptr_list[i] == ptr)
36963695
return true;
36973696
}
@@ -3708,19 +3707,29 @@ static void _webui_ptr_add(void * ptr, size_t size) {
37083707
if (ptr == NULL)
37093708
return;
37103709

3711-
// Search for first empty slot & add
3710+
// Search for first empty slot & save pointer
37123711
if (!_webui_ptr_exist(ptr)) {
3713-
size_t i = 0;
3714-
for (; i < _webui.ptr_position; i++) {
3712+
size_t i = 0;
3713+
for (; i < _webui.ptr_last_pos; i++) {
37153714
if (_webui.ptr_list[i] == NULL) {
3715+
// Pointer found
37163716
break;
37173717
}
37183718
}
3719-
_webui.ptr_list[_webui.ptr_position] = ptr;
3720-
_webui.ptr_size[_webui.ptr_position] = size;
3721-
_webui.ptr_position++;
3722-
if (_webui.ptr_position >= WEBUI_MAX_IDS)
3723-
_webui.ptr_position = (WEBUI_MAX_IDS - 1);
3719+
if (i == _webui.ptr_last_pos) {
3720+
// Pointer not found
3721+
i = _webui.ptr_last_pos++;
3722+
if (_webui.ptr_last_pos >= (WEBUI_MAX_IDS * 2)) {
3723+
_webui.ptr_last_pos = ((WEBUI_MAX_IDS * 2) - 1);
3724+
#ifdef WEBUI_LOG
3725+
printf("[Core]\t\t_webui_ptr_add(0x%p) -> ERROR: Maximum pointer capacity reached.\n",
3726+
ptr);
3727+
#endif
3728+
}
3729+
}
3730+
// Add pointer
3731+
_webui.ptr_list[i] = ptr;
3732+
_webui.ptr_size[i] = size;
37243733
#ifdef WEBUI_LOG_VERBOSE
37253734
printf("[Core]\t\t_webui_ptr_add(0x%p) -> Pointer #%zu saved (%zu + 1 bytes)\n", ptr, i, size);
37263735
#endif
@@ -3739,10 +3748,11 @@ static void _webui_free_mem(void * ptr) {
37393748
_webui_mutex_lock(&_webui.mutex_mem);
37403749

37413750
// Search for pointer & free
3742-
for (size_t i = 0; i < _webui.ptr_position; i++) {
3751+
for (size_t i = 0; i < _webui.ptr_last_pos; i++) {
37433752
if (_webui.ptr_list[i] == ptr) {
37443753
#ifdef WEBUI_LOG_VERBOSE
3745-
printf("[Core]\t\t_webui_free_mem(0x%p) -> Pointer #%zu freed (%zu + 1 bytes)\n", ptr, i, _webui.ptr_size[i]);
3754+
printf("[Core]\t\t_webui_free_mem(0x%p) -> Pointer #%zu freed (%zu + 1 bytes)\n",
3755+
ptr, i, _webui.ptr_size[i]);
37463756
#endif
37473757
free(ptr);
37483758
_webui.ptr_size[i] = 0;
@@ -3751,9 +3761,9 @@ static void _webui_free_mem(void * ptr) {
37513761
}
37523762

37533763
// Search (backward) for first empty slot
3754-
for (int i = _webui.ptr_position; i >= 0;i--) {
3764+
for (int i = _webui.ptr_last_pos; i >= 0;i--) {
37553765
if (_webui.ptr_list[i] == NULL) {
3756-
_webui.ptr_position = i;
3766+
_webui.ptr_last_pos = i;
37573767
break;
37583768
}
37593769
}
@@ -3777,14 +3787,16 @@ static void _webui_free_all_mem(void) {
37773787

37783788
// Free all pointers in the list
37793789
void * ptr = NULL;
3780-
for (size_t i = 0; i < _webui.ptr_position; i++) {
3790+
for (size_t i = 0; i < _webui.ptr_last_pos; i++) {
37813791
ptr = _webui.ptr_list[i];
37823792
if (ptr != NULL) {
37833793
#ifdef WEBUI_LOG
3784-
printf("[Core]\t\t_webui_free_all_mem() -> Free %zu bytes @ 0x%p\n",
3785-
_webui.ptr_size[i], ptr);
3794+
printf("[Core]\t\t_webui_free_all_mem() -> Pointer #%zu freed (%zu + 1 bytes) 0x%p\n",
3795+
i, _webui.ptr_size[i], ptr);
37863796
#endif
37873797
free(ptr);
3798+
_webui.ptr_size[i] = 0;
3799+
_webui.ptr_list[i] = NULL;
37883800
}
37893801
}
37903802

0 commit comments

Comments
 (0)