aboutsummaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
authorJohn Ankarström <john@ankarstrom.se>2022-02-15 19:42:23 +0100
committerJohn Ankarström <john@ankarstrom.se>2022-02-15 19:42:23 +0100
commit3b05844d760424859912d3d673dd8fc2be73d96f (patch)
treeec7c764889a741424c3531e82afd4bd894503e02 /c
parentc1eee2b46cd5643ba8efb98b2cd598ef47c4daf6 (diff)
downloadEpisodeBrowser-3b05844d760424859912d3d673dd8fc2be73d96f.tar.gz
Fix memory bug in DlvShowEpisode.
I forgot to call PL_new_term_ref for tValue.
Diffstat (limited to 'c')
-rw-r--r--c/datalistview.c12
-rw-r--r--c/episodelistview.c5
-rw-r--r--c/main.c9
3 files changed, 21 insertions, 5 deletions
diff --git a/c/datalistview.c b/c/datalistview.c
index 4a0208d..208ef22 100644
--- a/c/datalistview.c
+++ b/c/datalistview.c
@@ -34,8 +34,8 @@ DlvCreate(HWND hWnd)
void
DlvShowEpisode(int iEpisode)
{
+ fid_t f;
HWND hListView;
- int r;
LVITEM lviKey, lviValue;
term_t t;
@@ -45,14 +45,15 @@ DlvShowEpisode(int iEpisode)
lviKey.mask = LVIF_TEXT;
lviValue.mask = LVIF_TEXT;
+ f = PL_open_foreign_frame();
t = PL_new_term_refs(3);
+
if(!PL_put_integer(t+0, iEpisode))
return;
- r = PL_call_predicate(NULL, PL_Q_NORMAL,
+ if (!PL_call_predicate(NULL, PL_Q_NORMAL,
PL_predicate("lookup_episode_local", 3, "episode_data"),
- t);
- if (!r)
+ t))
return;
/* The episode data is a list of unary compounds,
@@ -78,6 +79,7 @@ DlvShowEpisode(int iEpisode)
if (!szKey)
continue;
+ tValue = PL_new_term_ref();
if (!PL_get_arg(1, tHead, tValue))
continue;
if (!PL_get_atom_chars(tValue, &szValue))
@@ -106,4 +108,6 @@ DlvShowEpisode(int iEpisode)
free(tszValue);
}
}
+
+ PL_close_foreign_frame(f);
}
diff --git a/c/episodelistview.c b/c/episodelistview.c
index 0b9e855..42a2151 100644
--- a/c/episodelistview.c
+++ b/c/episodelistview.c
@@ -81,6 +81,7 @@ ElvHandleNotify(LPARAM lParam)
void
ElvUpdate()
{
+ fid_t f;
HWND hListView;
LVITEM lviEpisode, lviName;
qid_t q;
@@ -92,6 +93,7 @@ ElvUpdate()
lviEpisode.mask = LVIF_TEXT|LVIF_PARAM;
lviName.mask = LVIF_TEXT;
+ f = PL_open_foreign_frame();
t = PL_new_term_refs(2);
PL_call_predicate(NULL, PL_Q_NORMAL,
PL_predicate("update_tracked_episodes", 0, "track_episodes"),
@@ -162,7 +164,8 @@ ElvUpdate()
}
close:
- PL_close_query(q);
+ PL_cut_query(q);
+ PL_close_foreign_frame(f);
}
/* Update episode name. */
diff --git a/c/main.c b/c/main.c
index 045d31c..d2ae07b 100644
--- a/c/main.c
+++ b/c/main.c
@@ -23,6 +23,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
HWND hWnd;
MSG msg;
INITCOMMONCONTROLSEX icc;
+ //term_t t;
WNDCLASSEX wc;
/* Initialize Prolog. */
@@ -33,6 +34,14 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
if (!PL_initialise(1, rgArgs))
PL_halt(1);
+ //t = PL_new_term_refs(1);
+ //if (!PL_put_atom_chars(t+0, "false"))
+ // return 0;
+ //if (!PL_call_predicate(NULL, PL_Q_NORMAL,
+ // PL_predicate("set_prolog_gc_thread", 1, "user"),
+ // t))
+ // return 0;
+
Attach();
/* Create window. */