fix: properly releasing C memory to avoid double-freeing
This commit is contained in:
parent
c4f4d0422c
commit
314328c002
@ -294,40 +294,40 @@ func NewUserCallback(cCallback C.CB_I_S) *UserCallback {
|
|||||||
|
|
||||||
type SendMessageCallback struct {
|
type SendMessageCallback struct {
|
||||||
cCallback C.CB_S_I_S_S_I
|
cCallback C.CB_S_I_S_S_I
|
||||||
operationID *C.char
|
operationID string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSendMessageCallback(cCallback C.CB_S_I_S_S_I, operationID *C.char) *SendMessageCallback {
|
func NewSendMessageCallback(cCallback C.CB_S_I_S_S_I, operationID *C.char) *SendMessageCallback {
|
||||||
return &SendMessageCallback{cCallback: cCallback, operationID: operationID}
|
return &SendMessageCallback{cCallback: cCallback, operationID: C.GoString(operationID)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendMessageCallback) OnError(errCode int32, errMsg string) {
|
func (s SendMessageCallback) OnError(errCode int32, errMsg string) {
|
||||||
C.Call_CB_S_I_S_S_I(s.cCallback, s.operationID, C.int(errCode), C.CString(errMsg), NO_DATA, NO_PROGRESS)
|
C.Call_CB_S_I_S_S_I(s.cCallback, C.CString(s.operationID), C.int(errCode), C.CString(errMsg), NO_DATA, NO_PROGRESS)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendMessageCallback) OnSuccess(data string) {
|
func (s SendMessageCallback) OnSuccess(data string) {
|
||||||
C.Call_CB_S_I_S_S_I(s.cCallback, s.operationID, NO_ERR, NO_ERR_MSG, C.CString(data), NO_PROGRESS)
|
C.Call_CB_S_I_S_S_I(s.cCallback, C.CString(s.operationID), NO_ERR, NO_ERR_MSG, C.CString(data), NO_PROGRESS)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SendMessageCallback) OnProgress(progress int) {
|
func (s SendMessageCallback) OnProgress(progress int) {
|
||||||
C.Call_CB_S_I_S_S_I(s.cCallback, s.operationID, NO_ERR, NO_ERR_MSG, NO_DATA, C.int(progress))
|
C.Call_CB_S_I_S_S_I(s.cCallback, C.CString(s.operationID), NO_ERR, NO_ERR_MSG, NO_DATA, C.int(progress))
|
||||||
}
|
}
|
||||||
|
|
||||||
type BaseCallback struct {
|
type BaseCallback struct {
|
||||||
cCallback C.CB_S_I_S_S
|
cCallback C.CB_S_I_S_S
|
||||||
operationID *C.char
|
operationID string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBaseCallback(cCallback C.CB_S_I_S_S, operationID *C.char) *BaseCallback {
|
func NewBaseCallback(cCallback C.CB_S_I_S_S, operationID *C.char) *BaseCallback {
|
||||||
return &BaseCallback{cCallback: cCallback, operationID: operationID}
|
return &BaseCallback{cCallback: cCallback, operationID: C.GoString(operationID)}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b BaseCallback) OnError(errCode int32, errMsg string) {
|
func (b BaseCallback) OnError(errCode int32, errMsg string) {
|
||||||
C.Call_CB_S_I_S_S(b.cCallback, b.operationID, C.int(errCode), C.CString(errMsg), NO_DATA)
|
C.Call_CB_S_I_S_S(b.cCallback, C.CString(b.operationID), C.int(errCode), C.CString(errMsg), NO_DATA)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b BaseCallback) OnSuccess(data string) {
|
func (b BaseCallback) OnSuccess(data string) {
|
||||||
C.Call_CB_S_I_S_S(b.cCallback, b.operationID, NO_ERR, NO_ERR_MSG, C.CString(data))
|
C.Call_CB_S_I_S_S(b.cCallback, C.CString(b.operationID), NO_ERR, NO_ERR_MSG, C.CString(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
// =====================================================global_callback===============================================
|
// =====================================================global_callback===============================================
|
||||||
|
@ -10,19 +10,49 @@ typedef void (*CB_S_I_S_S_I)(char *,int,char *,char *,int);
|
|||||||
void Call_CB_I_S(CB_I_S func,int event,char* data)
|
void Call_CB_I_S(CB_I_S func,int event,char* data)
|
||||||
{
|
{
|
||||||
func(event,data);
|
func(event,data);
|
||||||
free(data);
|
if (data != NULL && data[0] != '\0')
|
||||||
|
{
|
||||||
|
printf("this is not null data event\n");
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void Call_CB_S_I_S_S(CB_S_I_S_S func,char* operationID, int errCode,char* errMsg,char* data)
|
void Call_CB_S_I_S_S(CB_S_I_S_S func,char* operationID, int errCode,char* errMsg,char* data)
|
||||||
{
|
{
|
||||||
func(operationID,errCode,errMsg,data);
|
func(operationID,errCode,errMsg,data);
|
||||||
free(errMsg);
|
if (errMsg != NULL && errMsg[0] != '\0')
|
||||||
free(data);
|
{
|
||||||
|
printf("this is not null errmsg\n");
|
||||||
|
free(errMsg);
|
||||||
|
}
|
||||||
|
if (data != NULL && data[0] != '\0')
|
||||||
|
{
|
||||||
|
printf("this is not null data base,opid:%s,data:%s\n",operationID,data);
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
if (operationID != NULL)
|
||||||
|
{
|
||||||
|
printf("this is not null operationID:%s\n",operationID);
|
||||||
|
free(operationID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void Call_CB_S_I_S_S_I(CB_S_I_S_S_I func,char* operationID,int errCode,char* errMsg,char* data,int progress)
|
void Call_CB_S_I_S_S_I(CB_S_I_S_S_I func,char* operationID,int errCode,char* errMsg,char* data,int progress)
|
||||||
{
|
{
|
||||||
func(operationID,errCode,errMsg,data,progress);
|
func(operationID,errCode,errMsg,data,progress);
|
||||||
free(errMsg);
|
if (errMsg != NULL && errMsg[0] != '\0')
|
||||||
free(data);
|
{
|
||||||
|
printf("this is not null errmsg\n");
|
||||||
|
free(errMsg);
|
||||||
|
}
|
||||||
|
if (data != NULL && data[0] != '\0')
|
||||||
|
{
|
||||||
|
printf("this is not null data\n");
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
if (operationID != NULL)
|
||||||
|
{
|
||||||
|
printf("this is not null operationID\n");
|
||||||
|
free(operationID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
enum CONN_EVENT{
|
enum CONN_EVENT{
|
||||||
CONNECTING,
|
CONNECTING,
|
||||||
|
@ -46,10 +46,11 @@ int main(int argc, char **argv)
|
|||||||
char* loginUserID=get_login_user();
|
char* loginUserID=get_login_user();
|
||||||
|
|
||||||
printf("return :%s\n",loginUserID);
|
printf("return :%s\n",loginUserID);
|
||||||
|
char operationID1[] = "12345,create";
|
||||||
char* message = create_text_message(operationID,"哈哈");
|
char *message = create_text_message(operationID1, "哈哈");
|
||||||
printf("return :%s\n",message);
|
printf("return :%s\n",message);
|
||||||
get_all_conversation_list(c_base_callback,operationID);
|
char operationID2[] = "12345,get_all_conversation_list";
|
||||||
|
get_all_conversation_list(c_base_callback, operationID2);
|
||||||
|
|
||||||
sleep(1000000);
|
sleep(1000000);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user