aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/doc.h
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2025-05-03 11:33:01 +0300
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2025-05-03 11:33:01 +0300
commit850000492cd43e40109b3a11c8613b5fff577755 (patch)
tree0297fff124fbdf18a5cb125d0391561129ce46ef /src/doc.h
parente15ffff6b808d2b60c08f2a4401ff35a3dc37bb7 (diff)
downloadsciteco-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.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/doc.h b/src/doc.h
index 4ecfd21..99568ff 100644
--- a/src/doc.h
+++ b/src/doc.h
@@ -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);
}