memory leakage problem in erl_format

Serge Aleynikov <>
Fri May 20 15:20:23 CEST 2005


I am not quite clear on your use of CreateMutex() and CloseHandle().  If 
the intent is to protect the call to erl_* functions to make 
send_5to_enode() thread-safe, I would suggest you to create/destroy the 
mutex outside of this function, and pass it as a parameter (or use a 
global variable), such as:

HANDLE mutex=NULL;

int initialize() {
   mutex=CreateMutex(NULL,FALSE,"erlang3");
   return (mutex != NULL);
}

void finalize() {
   if (mutex != NULL) {
     CloseHandle(mutex);
     mutex = NULL;
   }
}


Here's the snippet from MSDN about the name collisions in the mutex 
names (lpName):

"If lpName matches the name of an existing event, semaphore, waitable 
timer, job, or file-mapping object, the function fails and the 
GetLastError function returns ERROR_INVALID_HANDLE. This occurs because 
these objects share the same name space."

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createmutex.asp

This might be contributing to the problem you are seeing.

Serge

maruthavanan s wrote:
> hi!
> 
> I am using erl_interface in windows enviroment with otp R10B-2. i am 
> using the following function to send messages from c exe to erlang node.
> 
> void send_5to_enode(int e1,int e2,int e3,int e4, int e5)
> {
> ETERM *t1;
> int Result;
> HANDLE mutex=NULL;
> DWORD result=0;
> mutex=CreateMutex(NULL,FALSE,"erlang3");
> result=WaitForSingleObject(mutex,INFINITE);
> t1=erl_format("{~i,~i,~i,~i,~i}",e1,e2,e3,e4,e5);
> Result=erl_reg_send(sockfd, "enodereceiver", t1);
> erl_free_compound(t1);
> erl_eterm_release();
> ReleaseMutex(mutex);
> CloseHandle(mutex);
> }
> 
> If the load is heavy then this function is rapidly called and at certain 
> times we get a error saying unhandled exception. Later we debug and 
> found that when erl_format is called that internally calls some memory 
> alloc function and we get error in this point, also some times we get 
> error exception in erl_reg_send(). we used function 
> erl_eterm_statistics() to find the allocated and freed memory blocks and 
> some times it shows that allocated block as -1.
> 
> Anything to be changed on the above code?
> Please help.
> 
> regards,
> Maruthavanan.S




More information about the erlang-questions mailing list