diff --git a/res/res_sorcery_memory_cache.c b/res/res_sorcery_memory_cache.c
index 0ce0e33a13e4745f59ef24d24774bc5f7a3410d4..58aaada41e5a32dd6366d23728d85ca3be0a343e 100644
--- a/res/res_sorcery_memory_cache.c
+++ b/res/res_sorcery_memory_cache.c
@@ -848,13 +848,16 @@ static void *sorcery_memory_cache_retrieve_id(const struct ast_sorcery *sorcery,
 			if (cached->stale_update_sched_id == -1) {
 				struct stale_update_task_data *task_data;
 
-				task_data = stale_update_task_data_alloc((struct ast_sorcery *)sorcery, cache,
-					type, cached->object);
+				task_data = stale_update_task_data_alloc((struct ast_sorcery *) sorcery,
+					cache, type, cached->object);
 				if (task_data) {
 					ast_debug(1, "Cached sorcery object type '%s' ID '%s' is stale. Refreshing\n",
 						type, id);
-					cached->stale_update_sched_id = ast_sched_add(sched, 1, stale_item_update, task_data);
-				} else {
+					cached->stale_update_sched_id = ast_sched_add(sched, 1,
+						stale_item_update, task_data);
+				}
+				if (cached->stale_update_sched_id < 0) {
+					ao2_cleanup(task_data);
 					ast_log(LOG_ERROR, "Unable to update stale cached object type '%s', ID '%s'.\n",
 						type, id);
 				}