x/ref: Switch v23_syncbase_Handle from void* to uintptr_t
The 'void*' for v23_syncbase_Handle is causing random crashes because
Go does some checks that the value points to some valid memory
address.
MultiPart: 2/2
Change-Id: Ie1414f5e7a6858027d8a2a8459935f9201918b69
diff --git a/SyncbaseCore/Source/Collection.swift b/SyncbaseCore/Source/Collection.swift
index 557c9be..229f85f 100644
--- a/SyncbaseCore/Source/Collection.swift
+++ b/SyncbaseCore/Source/Collection.swift
@@ -300,7 +300,7 @@
let cLimitBytes = v23_syncbase_Bytes(
p: unsafeBitCast(cLimitStr.p, UnsafeMutablePointer<UInt8>.self), n: cLimitStr.n)
let callbacks = v23_syncbase_CollectionScanCallbacks(
- handle: v23_syncbase_Handle(oHandle),
+ handle: v23_syncbase_Handle(unsafeBitCast(oHandle, UInt.self)),
onKeyValue: { Collection.onScanKeyValue($0, kv: $1) },
onDone: { Collection.onScanDone($0, err: $1) })
v23_syncbase_CollectionScan(
@@ -321,7 +321,8 @@
private static func onScanKeyValue(handle: v23_syncbase_Handle, kv: v23_syncbase_KeyValue) {
let key = kv.key.toString()!
let valueBytes = kv.value.toNSData()!
- let handle = Unmanaged<ScanHandle>.fromOpaque(COpaquePointer(handle)).takeUnretainedValue()
+ let handle = Unmanaged<ScanHandle>.fromOpaque(
+ COpaquePointer(bitPattern: handle)).takeUnretainedValue()
handle.onKeyValue(key, valueBytes: valueBytes)
}
@@ -330,7 +331,8 @@
if let e = err.toVError() {
serr = SyncbaseError(e)
}
- let handle = Unmanaged<ScanHandle>.fromOpaque(COpaquePointer(handle)).takeRetainedValue()
+ let handle = Unmanaged<ScanHandle>.fromOpaque(
+ COpaquePointer(bitPattern: handle)).takeRetainedValue()
handle.onDone(serr)
}
diff --git a/SyncbaseCore/Source/Watch.swift b/SyncbaseCore/Source/Watch.swift
index b801500..28bf686 100644
--- a/SyncbaseCore/Source/Watch.swift
+++ b/SyncbaseCore/Source/Watch.swift
@@ -182,7 +182,7 @@
let cPatterns = try v23_syncbase_CollectionRowPatterns(patterns)
let cResumeMarker = v23_syncbase_Bytes(resumeMarker)
let callbacks = v23_syncbase_DbWatchPatternsCallbacks(
- handle: v23_syncbase_Handle(oHandle),
+ handle: v23_syncbase_Handle(unsafeBitCast(oHandle, UInt.self)),
onChange: { Watch.onWatchChange($0, change: $1) },
onError: { Watch.onWatchError($0, err: $1) })
v23_syncbase_DbWatchPatterns(
@@ -202,7 +202,8 @@
// the functions inside the passed handle.
private static func onWatchChange(handle: v23_syncbase_Handle, change: v23_syncbase_WatchChange) {
let change = change.toWatchChange()
- let handle = Unmanaged<Watch.Handle>.fromOpaque(COpaquePointer(handle)).takeUnretainedValue()
+ let handle = Unmanaged<Watch.Handle>.fromOpaque(
+ COpaquePointer(bitPattern: handle)).takeUnretainedValue()
handle.onChange(change)
}
@@ -211,7 +212,8 @@
if let verr: VError = err.toVError() {
e = SyncbaseError(verr)
}
- let handle = Unmanaged<Watch.Handle>.fromOpaque(COpaquePointer(handle)).takeRetainedValue()
+ let handle = Unmanaged<Watch.Handle>.fromOpaque(
+ COpaquePointer(bitPattern: handle)).takeRetainedValue()
handle.onError(e)
}
}
\ No newline at end of file