Author: ab
Date: 2006-07-01 07:38:26 +0000 (Sat, 01 Jul 2006)
New Revision: 16723

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16723

Log:
Remove talloc_steal() usage from vl-messaging code before merging with the 
trunk. Patch from Aleksey Fedoseev
Modified:
   branches/tmp/vl-messaging/source/lib/dbwrap_file.c
   branches/tmp/vl-messaging/source/lib/dbwrap_msg.c


Changeset:
Modified: branches/tmp/vl-messaging/source/lib/dbwrap_file.c
===================================================================
--- branches/tmp/vl-messaging/source/lib/dbwrap_file.c  2006-07-01 02:15:52 UTC 
(rev 16722)
+++ branches/tmp/vl-messaging/source/lib/dbwrap_file.c  2006-07-01 07:38:26 UTC 
(rev 16723)
@@ -314,7 +314,13 @@
                        }
 
                        data.dsize = rec->value.dsize;
-                       data.dptr = talloc_steal(mem_ctx, rec->value.dptr);
+                       data.dptr = talloc_memdup(mem_ctx, rec->value.dptr, 
rec->value.dsize);
+                       if(data.dptr == NULL) {
+                               DEBUG(0, ("talloc failed\n"));
+                               TALLOC_FREE(rec);
+                               TALLOC_FREE(mem_ctx);
+                               return -1;                              
+                       }
                        TALLOC_FREE(rec);
                        count += 1;
 

Modified: branches/tmp/vl-messaging/source/lib/dbwrap_msg.c
===================================================================
--- branches/tmp/vl-messaging/source/lib/dbwrap_msg.c   2006-07-01 02:15:52 UTC 
(rev 16722)
+++ branches/tmp/vl-messaging/source/lib/dbwrap_msg.c   2006-07-01 07:38:26 UTC 
(rev 16723)
@@ -310,27 +310,42 @@
 
        wait_for_return(ctx);
 
-       if(ctx->record) {
-               ctx->record->key.dsize = key.dsize;
-               ctx->record->key.dptr = talloc_memdup(ctx->record, key.dptr, 
key.dsize);
-               if(ctx->record->key.dptr == NULL) {
-                       DEBUG(0, ("talloc failed\n"));
-                       TALLOC_FREE(ctx->record);
-                       return NULL;
-               }
-       } else {
+       if(!ctx->record) {
                DEBUG(0, ("db record is NULL\n"));
                return NULL;
        }
-       
-       result = talloc_steal(mem_ctx, ctx->record);
+
+       result = TALLOC_P(mem_ctx, struct db_record);
        if(result == NULL) {
-               DEBUG(0, ("talloc_steal failed\n"));
+               DEBUG(0, ("talloc failed\n"));
                TALLOC_FREE(ctx->record);
                return NULL;
        }
+
+       result->key.dsize = key.dsize;
+       result->key.dptr = talloc_memdup(result, key.dptr, key.dsize);
+       if(result->key.dptr == NULL) {
+               DEBUG(0, ("talloc failed\n"));
+               TALLOC_FREE(ctx->record);
+               TALLOC_FREE(result);
+               return NULL;
+       }
+
+       result->value.dsize = ctx->record->value.dsize;
+       result->value.dptr = talloc_memdup(result, ctx->record->value.dptr,
+                                                                        
ctx->record->value.dsize);
+       if(result->value.dptr == NULL) {
+               DEBUG(0, ("talloc failed\n"));
+               TALLOC_FREE(ctx->record);
+               TALLOC_FREE(result);
+               return NULL;
+       }
+
+       result->store = db_msg_store;
+       result->delete_rec = db_msg_delete;
+       result->private_data = ctx;
        
-       ctx->record = NULL;
+       TALLOC_FREE(ctx->record);
 
        return result;
 }
@@ -467,13 +482,14 @@
 
        if(value.dsize > 0) {
                result->value.dsize = value.dsize;
-               result->value.dptr = talloc_steal(result, value.dptr);
+               result->value.dptr = talloc_memdup(result, value.dptr, 
value.dsize);
                if (result->value.dptr == NULL) {
-                       DEBUG(0, ("talloc_steal failed\n"));
+                       DEBUG(0, ("talloc failed\n"));
                        TALLOC_FREE(value.dptr);
                        TALLOC_FREE(result);
                        return ;
                }
+               TALLOC_FREE(value.dptr);
        }
        result->store = db_msg_store;
        result->delete_rec = db_msg_delete;

Reply via email to