这个是去年11月我写过的一段:貌似和你的一样也!
上面的第二句话应该改成:
n1 = (n1 - 1 + n2 % UCACHE_HASHBSIZE) % UCACHE_HASHSIZE + 1;
这个bug导致的问题是使用smthbbs的站上有大概1/374的id是不可以通过id补全看到的
【 在 dvlt (-: :-) 的大作中提到: 】
: 那么这里就出现了一个情况:相同前缀的字符串不一定在一个bucket里,因为
: 上面两处加了两次1。对于例中archmagi的情况,后面五个字符的hash值正好
: 是373,于是 H(archmagi)==H(arc)+374, 因此它们不在同一个bucket
: 中了。这就导致了u_namecomplete没法在arc的bucket里找到archmagi。
: 我想了一个解决方法是,把
: n1 = (n1 + n2 % UCACHE_HASHBSIZE) % UCACHE_HASHSIZE + 1;
: 改成
: n1 = ((n1 - 1) + n2 % UCACHE_HASHBSIZE) % UCACHE_HASHSIZE + 1;
: 这样就避免了加两次1的毛病。
: 这个解决方法能够解决archmagi的问题。但是其副作用我尚不清楚。还待前辈指教。
--
FROM 61.182.213.*