This is similar to soup_session_abort, except that it also prevents any
additional requests from being queued. This prevents long waits if we
cancel during a loop, as was done in the AWeather alerts plugin.
+/**
+ * grits_http_abort:
+ * @http: the #GritsHttp to abort
+ *
+ * Cancels any pending requests and prevents new requests.
+ */
+void grits_http_abort(GritsHttp *http)
+{
+ g_debug("GritsHttp: abort - %s", http->prefix);
+ http->aborted = TRUE;
+ soup_session_abort(http->soup);
+}
+
/**
* grits_http_free:
* @http: the #GritsHttp to free
/**
* grits_http_free:
* @http: the #GritsHttp to free
void grits_http_free(GritsHttp *http)
{
g_debug("GritsHttp: free - %s", http->prefix);
void grits_http_free(GritsHttp *http)
{
g_debug("GritsHttp: free - %s", http->prefix);
- soup_session_abort(http->soup);
g_object_unref(http->soup);
g_free(http->prefix);
g_free(http);
g_object_unref(http->soup);
g_free(http->prefix);
g_free(http);
GritsCacheType mode, GritsChunkCallback callback, gpointer user_data)
{
g_debug("GritsHttp: fetch - %s mode=%d", local, mode);
GritsCacheType mode, GritsChunkCallback callback, gpointer user_data)
{
g_debug("GritsHttp: fetch - %s mode=%d", local, mode);
+ if (http->aborted) {
+ g_debug("GritsPluginSat: _load_tile_thread - aborted");
+ return NULL;
+ }
gchar *path = _get_cache_path(http, local);
/* Unlink the file if we're refreshing it */
gchar *path = _get_cache_path(http, local);
/* Unlink the file if we're refreshing it */
typedef struct _GritsHttp {
SoupSession *soup;
gchar *prefix;
typedef struct _GritsHttp {
SoupSession *soup;
gchar *prefix;
} GritsHttp;
GritsHttp *grits_http_new(const gchar *prefix);
} GritsHttp;
GritsHttp *grits_http_new(const gchar *prefix);
+void grits_http_abort(GritsHttp *http);
+
void grits_http_free(GritsHttp *http);
gchar *grits_http_fetch(GritsHttp *http, const gchar *uri, const gchar *local,
void grits_http_free(GritsHttp *http);
gchar *grits_http_fetch(GritsHttp *http, const gchar *uri, const gchar *local,
if (elev->viewer) {
GritsViewer *viewer = elev->viewer;
g_signal_handler_disconnect(viewer, elev->sigid);
if (elev->viewer) {
GritsViewer *viewer = elev->viewer;
g_signal_handler_disconnect(viewer, elev->sigid);
- soup_session_abort(elev->wms->http->soup);
+ grits_http_abort(elev->wms->http);
g_thread_pool_free(elev->threads, TRUE, TRUE);
elev->viewer = NULL;
if (LOAD_BIL)
g_thread_pool_free(elev->threads, TRUE, TRUE);
elev->viewer = NULL;
if (LOAD_BIL)
if (map->viewer) {
GritsViewer *viewer = map->viewer;
g_signal_handler_disconnect(viewer, map->sigid);
if (map->viewer) {
GritsViewer *viewer = map->viewer;
g_signal_handler_disconnect(viewer, map->sigid);
- soup_session_abort(map->tms->http->soup);
- //soup_session_abort(map->wms->http->soup);
+ grits_http_abort(map->tms->http);
+ //grits_http_abort(map->wms->http);
g_thread_pool_free(map->threads, TRUE, TRUE);
map->viewer = NULL;
grits_viewer_remove(viewer, GRITS_OBJECT(map->tiles));
g_thread_pool_free(map->threads, TRUE, TRUE);
map->viewer = NULL;
grits_viewer_remove(viewer, GRITS_OBJECT(map->tiles));
if (sat->viewer) {
GritsViewer *viewer = sat->viewer;
g_signal_handler_disconnect(viewer, sat->sigid);
if (sat->viewer) {
GritsViewer *viewer = sat->viewer;
g_signal_handler_disconnect(viewer, sat->sigid);
- soup_session_abort(sat->wms->http->soup);
+ grits_http_abort(sat->wms->http);
g_thread_pool_free(sat->threads, TRUE, TRUE);
sat->viewer = NULL;
grits_viewer_remove(viewer, GRITS_OBJECT(sat->tiles));
g_thread_pool_free(sat->threads, TRUE, TRUE);
sat->viewer = NULL;
grits_viewer_remove(viewer, GRITS_OBJECT(sat->tiles));