changeset 87:4c8683490c14

Fix a memory leak due to the recent DW 3.0 changes... Also update the Go test programs to function more like the C version.
author Brian Smith <brian@dbsoft.org>
date Fri, 30 Aug 2013 04:17:49 -0500
parents 2237ef63fb69
children c1370f669734
files src/dw/dw.go src/dwootest/dwootest.go src/dwtest/dwtest.go
diffstat 3 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/dw/dw.go	Thu Aug 15 14:08:25 2013 -0500
+++ b/src/dw/dw.go	Fri Aug 30 04:17:49 2013 -0500
@@ -4277,7 +4277,9 @@
 func Container_query_start(handle HANDLE, flags uint) string {
    cresult := C.go_container_query_start(handle.GetHandle(), C.ulong(flags));
    result := C.GoString(cresult);
-   /* TODO: Do I need to free this? */
+   if((flags & C.DW_CR_RETDATA) == 0) {
+      C.dw_free(unsafe.Pointer(cresult));
+   }
    return result;
 }
 
@@ -4290,7 +4292,9 @@
 func Container_query_next(handle HANDLE, flags uint) string {
    cresult := C.go_container_query_next(handle.GetHandle(), C.ulong(flags));
    result := C.GoString(cresult);
-   /* TODO: Do I need to free this? */
+   if((flags & C.DW_CR_RETDATA) == 0) {
+      C.dw_free(unsafe.Pointer(cresult));
+   }
    return result;
 }
 
--- a/src/dwootest/dwootest.go	Thu Aug 15 14:08:25 2013 -0500
+++ b/src/dwootest/dwootest.go	Fri Aug 30 04:17:49 2013 -0500
@@ -909,6 +909,8 @@
                                     message := fmt.Sprintf("DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", 
                                             dw.HANDLE_TO_UINTPTR(window), dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata));
                                     container_status.SetText(message);
+                                    message = fmt.Sprintf("\r\nDW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x\r\n", 
+                                             dw.HANDLE_TO_UINTPTR(window), dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata));
                                     mle_point = container_mle.Import(message, mle_point);
                                     str := container.QueryStart(dw.CRA_SELECTED);
                                     for len(str) > 0 {
--- a/src/dwtest/dwtest.go	Thu Aug 15 14:08:25 2013 -0500
+++ b/src/dwtest/dwtest.go	Fri Aug 30 04:17:49 2013 -0500
@@ -677,6 +677,8 @@
     message := fmt.Sprintf("DW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x", dw.HANDLE_TO_UINTPTR(window),
             dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata));
     dw.Window_set_text(dw.POINTER_TO_HANDLE(data), message);
+    message = fmt.Sprintf("\r\nDW_SIGNAL_ITEM_SELECT: Window: %x Item: %x Text: %s Itemdata: %x\r\n", dw.HANDLE_TO_UINTPTR(window),
+            dw.HANDLE_TO_UINTPTR(item), text, uintptr(itemdata));
     mle_point = dw.Mle_import(container_mle, message, mle_point);
     str := dw.Container_query_start(container, dw.CRA_SELECTED);
     for len(str) > 0 {