diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-05-03 11:33:01 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-05-03 11:33:01 +0300 |
commit | 850000492cd43e40109b3a11c8613b5fff577755 (patch) | |
tree | 0297fff124fbdf18a5cb125d0391561129ce46ef /src/doc.h | |
parent | e15ffff6b808d2b60c08f2a4401ff35a3dc37bb7 (diff) | |
download | sciteco-850000492cd43e40109b3a11c8613b5fff577755.tar.gz |
fixed teco_doc_undo_exchange(): use reference counting now
* When popping from the Q-Register stack to local Q-Registers in macro calls,
problems would arise when rubbing out that macro call since we would eventually restore
a pointer that has been permanently freed along with the local Q-Registers.
* Naturally this could result in everything from Valgrind warnings to crashes.
* Added test case.
* There is still a test case that fails when run under `--valgrind`,
but it's apparently due to a glib-internal memory leak.
Diffstat (limited to 'src/doc.h')
-rw-r--r-- | src/doc.h | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -33,6 +33,8 @@ */ typedef struct teco_doc_scintilla_t teco_doc_scintilla_t; +TECO_DECLARE_UNDO_OBJECT(doc_scintilla, teco_doc_scintilla_t *); + /** * A Scintilla document. * @@ -108,7 +110,7 @@ void teco_doc_exchange(teco_doc_t *ctx, teco_doc_t *other); static inline void teco_doc_undo_exchange(teco_doc_t *ctx) { - teco_undo_ptr(ctx->doc); + teco_undo_object_doc_scintilla_push(&ctx->doc); teco_doc_undo_reset(ctx); } |