Files
Leency 019f2629dc apps/cedit: do not free the menu canvas from another thread (fix #636) (#702)
Fixes KolibriOS/kolibrios#636

**Причина.** Каждое меню работает в своём потоке и рисует себя из холста `m.canvas`. Этот холст освобождал (`G.destroy`) не только сам поток меню, но и другие потоки:
- `Menu.close()` вызывается из главного потока и при переключении подменю. Он освобождал холст до `K.ExitID()`.
- При срабатывании шортката из подменю холст родительского меню освобождал поток-потомок.

При быстрых кликах поток меню в этот момент как раз внутри `DrawCanvas` (sysfn 65). Ядро читает из уже освобождённого буфера и получает page fault в режиме ядра, поэтому в логе CS=8. Кроме того, если поток сам выходил через `exit`/`escape` одновременно с чужим `close()`, получался двойной free.

**Исправление.** В [Menu.ob07](develop/cedit/SRC/Menu.ob07) убрал все четыре `G.destroy` для холста меню: в `exit`, `escape`, `close` и в ветке шорткатов. Холст и так создаётся лениво в `open()` при `m.canvas = NIL`. Меню создаются один раз при старте, и размер у них не меняется, так что холст теперь живёт всё время работы программы. Утечки нет, и кроме того больше нет выделения и освобождения памяти при каждом открытии меню.

Reviewed-on: KolibriOS/kolibrios#702
Reviewed-by: Burer <burer@kolibrios.org>
Reviewed-by: Alexey Ryabov <alex@b00bl1k.ru>
Co-authored-by: leency <lipatov.kiril@gmail.com>
2026-09-18 22:07:28 +00:00
..
…
2023-02-26 19:26:25 +00:00
2023-04-13 19:16:45 +00:00
2023-03-05 21:40:21 +00:00
…
2023-03-05 21:40:21 +00:00
2023-03-05 21:40:21 +00:00
2023-03-28 22:27:10 +00:00
…
2023-04-13 19:16:45 +00:00
…
2025-02-28 14:27:08 +01:00
2023-03-28 22:27:10 +00:00
2025-02-28 14:27:08 +01:00
2023-03-05 21:40:21 +00:00
2023-03-28 22:27:10 +00:00