Browse Source

removed some memory leaks

Leon Urbas 11 years ago
parent
commit
62352bc7f8
3 changed files with 15 additions and 10 deletions
  1. 4 2
      include/opcua_basictypes.h
  2. 5 5
      src/opcua_basictypes.c
  3. 6 3
      src/opcua_transportLayer.c

+ 4 - 2
include/opcua_basictypes.h

@@ -46,9 +46,11 @@ typedef double UA_Double;
 /* heap memory functions */
 #define UA_NULL ((void*)0)
 extern void const * UA_alloc_lastptr;
-UA_Int32 UA_free(void * ptr);
+#define UA_free(ptr) _UA_free(ptr,__FILE__,__LINE__)
+UA_Int32 _UA_free(void * ptr,char*,int);
 UA_Int32 UA_memcpy(void *dst, void const *src, int size);
-UA_Int32 UA_alloc(void ** dst, int size);
+#define UA_alloc(ptr,size) _UA_alloc(ptr,size,__FILE__,__LINE__)
+UA_Int32 _UA_alloc(void ** dst, int size,char*,int);
 
 /* Array operations */
 UA_Int32 UA_Array_calcSize(UA_Int32 noElements, UA_Int32 type, void const ** ptr);

+ 5 - 5
src/opcua_basictypes.c

@@ -86,22 +86,22 @@ UA_Int32 UA_Array_new(void **p,UA_Int32 noElements, UA_Int32 type) {
 	return UA_ERR_NOT_IMPLEMENTED;
 }
 
-UA_Int32 UA_free(void * ptr){
-	printf("UA_free - ptr=%p\n",ptr);
+UA_Int32 _UA_free(void * ptr,char* f,int l){
+	printf("UA_free;%p;;%s;%d\n",ptr,f,l); fflush(stdout);
 	free(ptr);
 	return UA_SUCCESS;
 }
 
 void const * UA_alloc_lastptr;
-UA_Int32 UA_alloc(void ** ptr, int size){
+UA_Int32 _UA_alloc(void ** ptr, int size,char* f,int l){
 	UA_alloc_lastptr = *ptr = malloc(size);
-	printf("UA_alloc - ptr=%p, size=%d\n",*ptr,size);
+	printf("UA_alloc;%p;%d;%s;%d\n",*ptr,size,f,l); fflush(stdout);
 	if(*ptr == UA_NULL) return UA_ERR_NO_MEMORY;
 	return UA_SUCCESS;
 }
 
 UA_Int32 UA_memcpy(void * dst, void const * src, int size){
-	printf("UA_memcpy - dst=%p, src=%p, size=%d\n",dst,src,size);
+	printf("UA_memcpy;%p;%p;%d\n",dst,src,size);
 	memcpy(dst, src, size);
 	return UA_SUCCESS;
 }

+ 6 - 3
src/opcua_transportLayer.c

@@ -51,7 +51,7 @@ UA_Int32 TL_check(UA_connection *connection)
 
 UA_Int32 TL_receive(UA_connection *connection, UA_ByteString *packet)
 {
-
+	UA_Int32 retval = UA_SUCCESS;
 	UA_Int32 pos = 0;
 	UA_OPCUATcpMessageHeader *tcpMessageHeader;
 
@@ -98,7 +98,7 @@ UA_Int32 TL_receive(UA_connection *connection, UA_ByteString *packet)
 
 			//TODO ERROR HANDLING
 
-			return UA_ERROR_RCV_ERROR;
+			retval = UA_ERROR_RCV_ERROR;
 			break;
 		}
 
@@ -109,7 +109,9 @@ UA_Int32 TL_receive(UA_connection *connection, UA_ByteString *packet)
 		//length error: send error message to communication partner
 		//TL_send()
 	}
-	return UA_NO_ERROR;
+	// Clean Up
+	UA_OPCUATcpMessageHeader_delete(tcpMessageHeader);
+	return retval;
 }
 
 #define Cmp3Byte(data,pos,a,b,c) (*((Int32*) ((data)+(pos))) & 0xFFFFFF) == (Int32)(((Byte)(a))|((Byte)(b))<<8|((Byte)(c))<<16)
@@ -157,6 +159,7 @@ UA_Int32 TL_process(UA_connection *connection,UA_Int32 packetType, UA_Int32 *pos
 			printf("TL_process - maxChunkCount = %d \n",connection->transportLayer.remoteConf.maxChunkCount);
 
 			UA_String_copy(&(helloMessage->endpointUrl), &(connection->transportLayer.endpointURL));
+			UA_OPCUATcpHelloMessage_delete(helloMessage);
 
 			/* send back acknowledge */
 			//memory for message