mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
url-mode: purge SHM pixmaps when destroying URLs
Unlike other surface types, the SHM cookie depends on the address of each URL instance. This means if we enable, disable, and then enable URL mode again (thus showing exactly the same URLs as the first time), the URLs will have new addresses, and thus the old SHM pixmaps will not get purged automatically. So, manually purge them when destroying the URLs.
This commit is contained in:
parent
24dd44634a
commit
0a6e7e6167
3 changed files with 10 additions and 0 deletions
|
|
@ -49,6 +49,8 @@
|
|||
`tweak.allow-overflowing-double-width-glyphs`.
|
||||
* Regression: crash when a single-char, double-width glyph is in the
|
||||
last column, and `tweak.allow-overflowing-double-width-glyphs=yes`.
|
||||
* FD exhaustion when repeatedly entering/exiting URL mode with many
|
||||
URLs.
|
||||
|
||||
|
||||
### Security
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#include "grid.h"
|
||||
#include "render.h"
|
||||
#include "selection.h"
|
||||
#include "shm.h"
|
||||
#include "spawn.h"
|
||||
#include "terminal.h"
|
||||
#include "uri.h"
|
||||
|
|
@ -728,7 +729,9 @@ urls_reset(struct terminal *term)
|
|||
|
||||
if (term->window != NULL) {
|
||||
tll_foreach(term->window->urls, it) {
|
||||
const struct url *url = it->item.url;
|
||||
wayl_win_subsurface_destroy(&it->item.surf);
|
||||
shm_purge(term->wl->shm, shm_cookie_url(url));
|
||||
tll_remove(term->window->urls, it);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#include "input.h"
|
||||
#include "render.h"
|
||||
#include "selection.h"
|
||||
#include "shm.h"
|
||||
#include "util.h"
|
||||
#include "xmalloc.h"
|
||||
|
||||
|
|
@ -1410,6 +1411,9 @@ wayl_win_destroy(struct wl_window *win)
|
|||
if (win == NULL)
|
||||
return;
|
||||
|
||||
struct terminal *term = win->term;
|
||||
struct wl_shm *shm = term->wl->shm;
|
||||
|
||||
if (win->csd.move_timeout_fd != -1)
|
||||
close(win->csd.move_timeout_fd);
|
||||
|
||||
|
|
@ -1457,6 +1461,7 @@ wayl_win_destroy(struct wl_window *win)
|
|||
|
||||
tll_foreach(win->urls, it) {
|
||||
wayl_win_subsurface_destroy(&it->item.surf);
|
||||
shm_purge(shm, shm_cookie_url(it->item.url));
|
||||
tll_remove(win->urls, it);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue