diff options
author | Mike Pall <mike> | 2010-07-21 21:23:45 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-07-21 21:23:45 +0200 |
commit | 6667ab0f266b12909cf0eedd025525b24d987592 (patch) | |
tree | f7ae3500eac3fda50f347cf6344035545e02a400 /src/lib_jit.c | |
parent | 2ca58aa67d68076f8980395f45ce1215875fc0fc (diff) | |
download | luajit-6667ab0f266b12909cf0eedd025525b24d987592.tar.gz luajit-6667ab0f266b12909cf0eedd025525b24d987592.tar.bz2 luajit-6667ab0f266b12909cf0eedd025525b24d987592.zip |
Use independent hash for VM event dispatch.
Diffstat (limited to 'src/lib_jit.c')
-rw-r--r-- | src/lib_jit.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib_jit.c b/src/lib_jit.c index 033ab4c4..4cabb2f7 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c | |||
@@ -114,8 +114,11 @@ LJLIB_CF(jit_attach) | |||
114 | GCstr *s = lj_lib_optstr(L, 2); | 114 | GCstr *s = lj_lib_optstr(L, 2); |
115 | luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE); | 115 | luaL_findtable(L, LUA_REGISTRYINDEX, LJ_VMEVENTS_REGKEY, LJ_VMEVENTS_HSIZE); |
116 | if (s) { /* Attach to given event. */ | 116 | if (s) { /* Attach to given event. */ |
117 | const uint8_t *p = (const uint8_t *)strdata(s); | ||
118 | uint32_t h = s->len; | ||
119 | while (*p) h = h ^ (lj_rol(h, 6) + *p++); | ||
117 | lua_pushvalue(L, 1); | 120 | lua_pushvalue(L, 1); |
118 | lua_rawseti(L, -2, VMEVENT_HASHIDX(s->hash)); | 121 | lua_rawseti(L, -2, VMEVENT_HASHIDX(h)); |
119 | G(L)->vmevmask = VMEVENT_NOCACHE; /* Invalidate cache. */ | 122 | G(L)->vmevmask = VMEVENT_NOCACHE; /* Invalidate cache. */ |
120 | } else { /* Detach if no event given. */ | 123 | } else { /* Detach if no event given. */ |
121 | setnilV(L->top++); | 124 | setnilV(L->top++); |