Index: Tests/session.eagle ================================================================== --- Tests/session.eagle +++ Tests/session.eagle @@ -90,12 +90,11 @@ ############################################################################### proc createMemoryChangeSetForConnection { connection rawData } { if {[isObjectHandle $connection] && $connection ne "null"} then { - return [$connection -alias \ - -objectflags +NoReturnReference CreateChangeSet $rawData] + return [$connection -alias CreateChangeSet $rawData] } return null } @@ -109,11 +108,14 @@ $session -alias CreatePatchSet byteArray } else { $session -alias CreateChangeSet byteArray } - return [createByteArray [arrayToList byteArray]] + set rawData [createByteArray [arrayToList byteArray]] + object removeref $rawData + + return $rawData } return null } @@ -258,10 +260,11 @@ proc matchSession { connection session expr } { if {[isObjectHandle $session] && $session ne "null"} then { if {![$session IsEmpty]} then { set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData if {[isObjectHandle $rawData] && $rawData ne "null"} then { return [matchChangeSet [set changeSet \ [$connection -alias CreateChangeSet $rawData]] $expr] } @@ -353,11 +356,14 @@ if {![isObjectHandle $session] || $session eq "null"} then { error "cannot create session" } catch {uplevel 1 $script} - return [createMemoryChangeSetForSession $session] + set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData + + return $rawData } ############################################################################### proc captureChangeSetFile { @@ -402,25 +408,19 @@ ############################################################################### proc createByteArray { list } { set length [llength $list] - - set result [object create -alias \ - -objectflags +NoReturnReference System.Byte\[\] $length] + set result [object create -alias System.Byte\[\] $length] for {set index 0} {$index < $length} {incr index} { set element [lindex $list $index] set value [object invoke -create Byte Parse $element] $result SetValue $value $index } - # - # NOTE: Prevent returning, which unsets all local variables, - # from causing the byte array object to be disposed. - # - object addref $result; object addref $result; return $result + return $result } ############################################################################### proc tableFilterCallbackT1 { clientData name } { @@ -471,10 +471,11 @@ $session AttachTable null makeSomeChanges $db t1 [list insert update delete] set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData writeRawDataToFile $fileName(1) $rawData writeStreamChangeSetForSession $session $fileName(2) openStreamChangeSetForConnection $connection $fileName(2) "" state @@ -528,13 +529,16 @@ $session AttachTable null makeSomeChanges $db t1 [list insert update delete] set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData set changeSet(1) \ [createMemoryChangeSetForConnection $connection $rawData] + + object removeref $changeSet(1) set changeSet(2) [$changeSet(1) -alias Invert] list [changeSetToString $changeSet(2) true] } -cleanup { @@ -651,10 +655,11 @@ makeSomeChanges $db t1 [list insert] lappend result IsEmpty [$session IsEmpty] set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData lappend result Length [$rawData Length] $session SetToEnabled lappend result IsEnabled [$session IsEnabled] @@ -661,13 +666,16 @@ makeSomeChanges $db t1 [list insert] lappend result IsEmpty [$session IsEmpty] set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData set changeSet(1) \ [createMemoryChangeSetForConnection $connection $rawData] + + object removeref $changeSet(1) lappend result [changeSetToString $changeSet(1) false] } -cleanup { cleanupSomeText @@ -710,21 +718,25 @@ makeSomeChanges $db t1 [list insert] lappend result IsEmpty [$session IsEmpty] set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData $session SetToDirect lappend result IsIndirect [$session IsIndirect] makeSomeChanges $db t1 [list insert] lappend result IsEmpty [$session IsEmpty] set rawData [createMemoryChangeSetForSession $session] + object removeref $rawData set changeSet(1) \ [createMemoryChangeSetForConnection $connection $rawData] + + object removeref $changeSet(1) lappend result [changeSetToString $changeSet(1) false] } -cleanup { cleanupSomeText @@ -831,23 +843,27 @@ set connection [getDbConnection] set rawData(1) [captureChangeSetRawData $connection main null { makeSomeChanges $db t1 [list delete] 1 - }] + }]; object removeref $rawData(1) makeSomeChanges $db t1 [list insert] 1 set rawData(2) [captureChangeSetRawData $connection main null { makeSomeChanges $db t1 [list insert] - }] + }]; object removeref $rawData(2) set changeSet(1) \ [createMemoryChangeSetForConnection $connection $rawData(1)] + object removeref $changeSet(1) + set changeSet(2) \ [createMemoryChangeSetForConnection $connection $rawData(2)] + + object removeref $changeSet(2) set changeSet(3) [$changeSet(1) -alias CombineWith $changeSet(2)] $changeSet(3) -marshalflags +DynamicCallback \ Apply conflictCallback null