Jacek Caban (@jacek) commented about dlls/mshtml/htmlstorage.c:
return NULL;
- wine_rb_init(&entry->data_map, session_entry_cmp);
- entry->ref = 1;
- entry->num_keys = 0;
- entry->origin_len = origin_len;
- memcpy(entry->origin, origin, origin_len * sizeof(WCHAR));
- wine_rb_put(&thread_data->session_storage_map, origin, &entry->entry);
- return entry;
+}
+static void release_session_map_entry(struct session_storage_map_entry *entry) +{
- thread_data_t *thread_data;
- if(!entry || --entry->ref || entry->num_keys || !(thread_data = get_thread_data(FALSE)))
This ref counting seems suspicions. You may, for example, end up clearing session entry when navigating between pages on the same origin (when previous page would already release HTML storage object before the new page has a chance to create it). Shouldn't session data be more persistent in general? I guess it could be queried for as long as the thread is alive.