diff options
| author | B. Watson <urchlay@slackware.uk> | 2026-04-27 02:35:27 -0400 |
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2026-04-27 02:35:27 -0400 |
| commit | 18c80370b5fed57d151c55d186cb94be0a1e1ec6 (patch) | |
| tree | e04e18189de4dd301e596ff9069f4571946fab2b | |
| parent | 668d47413c3e83c3a2b90da87057b8c0e1d489a4 (diff) | |
| download | fujinet-chat-18c80370b5fed57d151c55d186cb94be0a1e1ec6.tar.gz | |
Reclaim a screen's lines when it gets closed.
| -rw-r--r-- | src/pool.c | 16 | ||||
| -rw-r--r-- | src/pool.h | 4 | ||||
| -rw-r--r-- | src/screen.c | 5 |
3 files changed, 21 insertions, 4 deletions
@@ -122,3 +122,19 @@ void add_line(char s) { screens[s].line_list = p; screens[s].line_count++; } + +void pool_reclaim_lines(char s) { + line_t *p, *q; + + p = screens[s].line_list; + while(p != (line_t *)END_MARKER) { + q = p; + p = p->next; + } + + q->next = pools[screens[s].pool].free_list; + pools[screens[s].pool].free_list = screens[s].line_list; + + /* theoretically this could be 0, but as a safety net... */ + screens[s].line_list = (line_t *)END_MARKER; +} @@ -74,3 +74,7 @@ char get_smallest_pool(void); /* add a line to a screen */ void add_line(char s); + +/* called by scr_destroy(). returns a now-destroyed screen's + lines to the pool's free list. */ +void pool_reclaim_lines(char s); diff --git a/src/screen.c b/src/screen.c index d090e51..1bd239a 100644 --- a/src/screen.c +++ b/src/screen.c @@ -82,16 +82,13 @@ void scr_destroy(char s) { if(screens[s].status == SCR_UNUSED) return; - // pool_reclaim_lines(screens[s].pool, screens[s].line_list); + pool_reclaim_lines(s); pools[screens[s].pool].screen_count--; screens[s].title[0] = 0; screens[s].status = SCR_UNUSED; screens[s].pool = POOL_UNUSED; screens[s].line_count = screens[s].scrollback_pos = 0; - - /* theoretically this could be 0, but as a safety net... */ - screens[s].line_list = (line_t *)END_MARKER; } void render_vis_buf(void) { |
