summaryrefslogtreecommitdiff
path: root/src/nav.c
diff options
context:
space:
mode:
authorJorge Arellano Cid <jcid@dillo.org>2011-08-05 18:44:14 -0400
committerJorge Arellano Cid <jcid@dillo.org>2011-08-05 18:44:14 -0400
commita096c90f4a10c92ba55d8f34ad01266d05e47196 (patch)
tree9649bdb0b385ebe289bcc77187717441c96c7432 /src/nav.c
parent9eff7b30b70ee13501dba6e6061cd312b3a7186e (diff)
Added an API to access the expected URL resource
This fixes a segfault bug introduced by changeset 350af350b840. By mistake the expected URL got inside the parallel handling of CCC, into a race condition with a segfault path.
Diffstat (limited to 'src/nav.c')
-rw-r--r--src/nav.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/nav.c b/src/nav.c
index 31f9e92d..8dbb5044 100644
--- a/src/nav.c
+++ b/src/nav.c
@@ -248,10 +248,8 @@ static void Nav_open_url(BrowserWindow *bw, const DilloUrl *url,
*/
void a_Nav_cancel_expect(BrowserWindow *bw)
{
- if (bw->nav_expecting) {
- a_Url_free(bw->nav_expect_url);
- bw->nav_expect_url = NULL;
- bw->nav_expecting = FALSE;
+ if (a_Bw_expecting(bw)) {
+ a_Bw_cancel_expect(bw);
a_UIcmd_set_buttons_sens(bw);
}
if (bw->meta_refresh_status > 0)
@@ -263,7 +261,7 @@ void a_Nav_cancel_expect(BrowserWindow *bw)
*/
void a_Nav_cancel_expect_if_eq(BrowserWindow *bw, const DilloUrl *url)
{
- if (bw->nav_expecting && a_Url_cmp(url, bw->nav_expect_url) == 0)
+ if (a_Url_cmp(url, a_Bw_expected_url(bw)) == 0)
a_Nav_cancel_expect(bw);
}
@@ -281,8 +279,8 @@ void a_Nav_expect_done(BrowserWindow *bw)
dReturn_if_fail(bw != NULL);
- if (bw->nav_expecting) {
- url = bw->nav_expect_url;
+ if (a_Bw_expecting(bw)) {
+ url = a_Url_dup(a_Bw_expected_url(bw));
reload = (URL_FLAGS(url) & URL_ReloadPage);
repush = (URL_FLAGS(url) & URL_ReloadFromCache);
e2equery = (URL_FLAGS(url) & URL_E2EQuery);
@@ -293,6 +291,7 @@ void a_Nav_expect_done(BrowserWindow *bw)
m = URL_E2EQuery|URL_ReloadPage|URL_ReloadFromCache|URL_IgnoreScroll;
a_Url_set_flags(url, URL_FLAGS(url) & ~m);
url_idx = a_History_add_url(url);
+ a_Url_free(url);
if (repush) {
MSG("a_Nav_expect_done: repush!\n");
@@ -345,16 +344,17 @@ void a_Nav_expect_done(BrowserWindow *bw)
void a_Nav_push(BrowserWindow *bw, const DilloUrl *url,
const DilloUrl *requester)
{
+ const DilloUrl *e_url;
dReturn_if_fail (bw != NULL);
- if (bw->nav_expecting && !a_Url_cmp(bw->nav_expect_url, url) &&
- !strcmp(URL_FRAGMENT(bw->nav_expect_url),URL_FRAGMENT(url))) {
+ e_url = a_Bw_expected_url(bw);
+ if (e_url && !a_Url_cmp(e_url, url) &&
+ !strcmp(URL_FRAGMENT(e_url),URL_FRAGMENT(url))) {
/* we're already expecting that url (most probably a double-click) */
return;
}
a_Nav_cancel_expect(bw);
- bw->nav_expect_url = a_Url_dup(url);
- bw->nav_expecting = TRUE;
+ a_Bw_expect(bw, url);
Nav_open_url(bw, url, requester, 0);
}
@@ -370,8 +370,7 @@ static void Nav_repush(BrowserWindow *bw)
url = a_Url_dup(a_History_get_url(NAV_TOP_UIDX(bw)));
/* Let's make reload be from Cache */
a_Url_set_flags(url, URL_FLAGS(url) | URL_ReloadFromCache);
- bw->nav_expect_url = a_Url_dup(url);
- bw->nav_expecting = TRUE;
+ a_Bw_expect(bw, url);
Nav_open_url(bw, url, NULL, 0);
a_Url_free(url);
}
@@ -501,9 +500,9 @@ static void Nav_reload_callback(void *data)
a_Url_set_flags(r_url, URL_FLAGS(r_url) | URL_E2EQuery);
/* This is an explicit reload, so clear the SpamSafe flag */
a_Url_set_flags(r_url, URL_FLAGS(r_url) & ~URL_SpamSafe);
- bw->nav_expect_url = r_url;
- bw->nav_expecting = TRUE;
+ a_Bw_expect(bw, r_url);
Nav_open_url(bw, r_url, NULL, 0);
+ a_Url_free(r_url);
}
}
}