Patch #: 146 Type: performance improvement Priority: none Modification: speed up finder interface cache code Submitted: Rudy Nedved Archived: munnari.OZ.AU mac/cap.patches/cap60.patch146 Application: 'cd cap60; patch -p < cap60.patches/cap60.patch146' Summary: use name hash for initial comparison File: cap60/applications/aufs/afposfi.c *** applications/aufs/afposfi.c.orig Wed Jun 24 09:29:50 1992 --- applications/aufs/afposfi.c Mon Aug 2 19:36:47 1993 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 1992/06/23 23:29:41 $ ! * $Header: /mac/src/cap60/applications/aufs/RCS/afposfi.c,v 2.3 1992/06/23 23:29:41 djh Rel djh $ ! * $Revision: 2.3 $ */ /* --- 1,7 ---- /* ! * $Author: djh $ $Date: 1993/08/02 09:36:36 $ ! * $Header: /mac/src/cap60/applications/aufs/RCS/afposfi.c,v 2.4 1993/08/02 09:36:36 djh Rel djh $ ! * $Revision: 2.4 $ */ /* *************** *** 50,55 **** --- 50,56 ---- IDirP fe_pdir; /* directory */ int fe_okay; /* last internal modify count */ char *fe_fnam; /* file */ + long fe_hash; /* hash value of fe_fnam */ /* should we use ctime instead perhaps? */ time_t fe_mtime; /* last modify time: file system */ time_t fe_vtime; /* last time validated */ *************** *** 219,224 **** --- 220,226 ---- free(fe->fe_fnam); /* always free the name */ fe->fe_fnam = (char *) 0; /* and zero... */ + fe->fe_hash = 0; /* clear hash */ fe->next = NULL; /* trash it here since want in both */ if (fce == (FCacheEnt *) 0) /* check for recycled entry */ lfce = fce = fe; /* if none then save */ *************** *** 237,242 **** --- 239,246 ---- { if (fe->fe_pdir != key->fe_pdir) return(FALSE); + if (fe->fe_hash != key->fe_hash) + return(FALSE); return(strcmp(fe->fe_fnam,key->fe_fnam) == 0); } *************** *** 261,266 **** --- 265,271 ---- fe->fe_mtime = 0; time(&fe->fe_vtime); /* validate time stamp */ strcpy(fe->fe_fnam,key->fe_fnam); + fe->fe_hash = key->fe_hash; fc_readent(fe); return((char *) fe); } *************** *** 485,494 **** char *fn; { FCacheEnt key; key.fe_pdir = pdir; ! key.fe_fnam = fn; /* do the "quick" check first */ if (getfe == 0 || !fc_compare(getfe,&key)) { /* nope, either find in cache or load from disk */ --- 490,508 ---- char *fn; { FCacheEnt key; + register long hash; + register char *p; key.fe_pdir = pdir; ! p = key.fe_fnam = fn; + hash = 0; + while (*p) { + hash <<= 2; + hash += *p++; + } + key.fe_hash = hash; + /* do the "quick" check first */ if (getfe == 0 || !fc_compare(getfe,&key)) { /* nope, either find in cache or load from disk */ *************** *** 502,511 **** char *fn; { FCacheEnt key; int idx; key.fe_pdir = pdir; ! key.fe_fnam = fn; EModified(pdir); /* make parent directory as modified */ if (getfe == 0 || !fc_compare(getfe,&key)) { --- 516,534 ---- char *fn; { FCacheEnt key; + register long hash; + register char *p; int idx; key.fe_pdir = pdir; ! p = key.fe_fnam = fn; ! ! hash = 0; ! while (*p) { ! hash <<= 2; ! hash += *p++; ! } ! key.fe_hash = hash; EModified(pdir); /* make parent directory as modified */ if (getfe == 0 || !fc_compare(getfe,&key)) { *** lib/cap/abversion.c.orig Mon Aug 2 18:18:44 1993 --- lib/cap/abversion.c Mon Aug 2 19:38:59 1993 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 1993/08/02 08:18:37 $ ! * $Header: /mac/src/cap60/lib/cap/RCS/abversion.c,v 2.45 1993/08/02 08:18:37 djh Rel djh $ ! * $Revision: 2.45 $ */ /* --- 1,7 ---- /* ! * $Author: djh $ $Date: 1993/08/02 09:38:50 $ ! * $Header: /mac/src/cap60/lib/cap/RCS/abversion.c,v 2.46 1993/08/02 09:38:50 djh Rel djh $ ! * $Revision: 2.46 $ */ /* *************** *** 31,37 **** myversion.cv_name = "CAP"; myversion.cv_version = 6; myversion.cv_subversion = 0; ! myversion.cv_patchlevel = 145; myversion.cv_rmonth = "August"; myversion.cv_ryear = "1993"; switch (lap_proto) { --- 31,37 ---- myversion.cv_name = "CAP"; myversion.cv_version = 6; myversion.cv_subversion = 0; ! myversion.cv_patchlevel = 146; myversion.cv_rmonth = "August"; myversion.cv_ryear = "1993"; switch (lap_proto) { *** README.orig Mon Aug 2 18:19:43 1993 --- README Mon Aug 2 19:38:10 1993 *************** *** 2,8 **** CAP - Columbia AppleTalk Package for UNIX o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 145, August 1993 Notice ------ --- 2,8 ---- CAP - Columbia AppleTalk Package for UNIX o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 146, August 1993 Notice ------