- From: Henrik Frystyk Nielsen <frystyk@w3.org>
- Date: Tue, 22 Jun 1999 16:49:28 -0400
- To: www-lib@w3.org
- To: jose.kahan@w3.org
jose.kahan@w3.org wrote: > > Problem: > > If the libwww cache contains an entry for a document and you PUT the > document corresponding to this entry, the entry isn't updated. If you > quit the libwww application and you browse the document, you'll get the > previous version. > > Fix: > > In HTCache.c, I systematically delete the cache entry whenever doing > a PUT: Hmm, that is what the HTCacheCheckFilter() should do in HTCache.c (it is only done when we have a 2xx code so that we don't delete the cached entry if the operation doesn't suceed). PRIVATE int HTCacheCheckFilter (HTRequest * request, HTResponse * response, void * param, int status) { if (status/100==2 && !HTMethod_isSafe(HTRequest_method(request))) { if (status==201) { HTParentAnchor * anchor = HTAnchor_parent(HTResponse_redirection(response)); if (!anchor) anchor = HTRequest_anchor(request); HTCache_touch(request, response, anchor); } else { HTParentAnchor * anchor = HTRequest_anchor(request); HTCache * cache = HTCache_find(anchor); if (cache) { if (status == 204) HTCache_updateMeta(cache, request, response); else HTCache_remove(cache); } HTCache_touch(request, response, anchor); } } return HT_OK; } After the 204 status code is used slightly different now, the check should also be updated - try this patch to see if it works better: Index: HTCache.c =================================================================== RCS file: /sources/public/libwww/Library/src/HTCache.c,v retrieving revision 2.66 diff -c -r2.66 HTCache.c *** HTCache.c 1999/03/14 02:01:08 2.66 --- HTCache.c 1999/06/22 20:47:23 *************** *** 1366,1374 **** HTParentAnchor * anchor = HTRequest_anchor(request); HTCache * cache = HTCache_find(anchor); if (cache) { ! if (status == 204) HTCache_updateMeta(cache, request, response); ! else HTCache_remove(cache); } HTCache_touch(request, response, anchor); --- 1366,1381 ---- HTParentAnchor * anchor = HTRequest_anchor(request); HTCache * cache = HTCache_find(anchor); if (cache) { ! /* ! ** If we recieve a 204 and the method is unsafe then we have ! ** to delete the cache body but not the header information ! */ ! if (status == 204) { HTCache_updateMeta(cache, request, response); ! cache->size = 0; ! cache->range = YES; ! REMOVE(cache->cachename); ! } else HTCache_remove(cache); } HTCache_touch(request, response, anchor); -- Henrik Frystyk Nielsen, <frystyk@w3.org> World Wide Web Consortium, MIT/LCS NE43-356 545 Technology Square, Cambridge MA 02139, USA
Received on Tuesday, 22 June 1999 16:49:32 UTC