Fix crash under linux in Hamsandwich module

Fix crash under linux in Hamsandwich module
This commit is contained in:
Arkshine 2015-03-24 01:25:36 +01:00
parent a182ca62c8
commit b6febae2fa
4 changed files with 11 additions and 5 deletions

View File

@ -16,6 +16,8 @@
#ifndef FORWARD_H #ifndef FORWARD_H
#define FORWARD_H #define FORWARD_H
#include <am-refcounting.h>
enum fwdstate enum fwdstate
{ {
FSTATE_INVALID = 0, FSTATE_INVALID = 0,
@ -25,7 +27,7 @@ enum fwdstate
FSTATE_DESTROY FSTATE_DESTROY
}; };
class Forward class Forward :public ke::Refcounted<Forward>
{ {
public: public:
int id; // id of the forward int id; // id of the forward

View File

@ -89,12 +89,12 @@ public:
for (size_t i = 0; i < pre.length(); ++i) for (size_t i = 0; i < pre.length(); ++i)
{ {
delete pre.at(i); pre.at(i)->Release();
} }
for (size_t i = 0; i < post.length(); ++i) for (size_t i = 0; i < post.length(); ++i)
{ {
delete post.at(i); post.at(i)->Release();
} }
pre.clear(); pre.clear();

View File

@ -583,6 +583,7 @@ static cell AMX_NATIVE_CALL RegisterHam(AMX *amx, cell *params)
} }
Forward *pfwd = new Forward(fwd); Forward *pfwd = new Forward(fwd);
pfwd->AddRef();
// We've passed all tests... // We've passed all tests...
if (strcmp(classname, "player") == 0 && enableSpecialBot) if (strcmp(classname, "player") == 0 && enableSpecialBot)
@ -676,6 +677,9 @@ static cell AMX_NATIVE_CALL RegisterHamFromEntity(AMX *amx, cell *params)
// We've passed all tests... // We've passed all tests...
Forward *pfwd = new Forward(fwd);
pfwd->AddRef();
int **ivtable=(int **)vtable; int **ivtable=(int **)vtable;
void *vfunction=(void *)ivtable[hooklist[func].vtid]; void *vfunction=(void *)ivtable[hooklist[func].vtid];
@ -687,7 +691,6 @@ static cell AMX_NATIVE_CALL RegisterHamFromEntity(AMX *amx, cell *params)
if (hooks[func].at(i)->tramp == vfunction) if (hooks[func].at(i)->tramp == vfunction)
{ {
// Yes, this function is hooked // Yes, this function is hooked
Forward *pfwd=new Forward(fwd);
if (post) if (post)
{ {
hooks[func].at(i)->post.append(pfwd); hooks[func].at(i)->post.append(pfwd);
@ -710,7 +713,6 @@ static cell AMX_NATIVE_CALL RegisterHamFromEntity(AMX *amx, cell *params)
Hook *hook = new Hook(vtable, hooklist[func].vtid, hooklist[func].targetfunc, hooklist[func].isvoid, hooklist[func].needsretbuf, hooklist[func].paramcount, classname); Hook *hook = new Hook(vtable, hooklist[func].vtid, hooklist[func].targetfunc, hooklist[func].isvoid, hooklist[func].needsretbuf, hooklist[func].paramcount, classname);
hooks[func].append(hook); hooks[func].append(hook);
Forward *pfwd=new Forward(fwd);
if (post) if (post)
{ {
hook->post.append(pfwd); hook->post.append(pfwd);

View File

@ -84,6 +84,8 @@ void CHamSpecialBotHandler::RegisterHamSpecialBot(AMX *amx, int &func, const cha
void CHamSpecialBotHandler::RegisterChecked(AMX *amx, int &func, const char *function, int &post, Forward *pfwd) void CHamSpecialBotHandler::RegisterChecked(AMX *amx, int &func, const char *function, int &post, Forward *pfwd)
{ {
pfwd->AddRef();
void **vtable = m_specialbot_vtable; void **vtable = m_specialbot_vtable;
int **ivtable=(int **)vtable; int **ivtable=(int **)vtable;