mirror of
https://github.com/fluencelabs/sqlite-wasm-connector
synced 2025-04-12 19:16:04 +00:00
Avoid memory leak when failing to open connections
This commit is contained in:
parent
22580234c1
commit
42f9bbfe01
@ -28,12 +28,25 @@ impl Connection {
|
|||||||
pub fn open_with_flags<T: AsRef<Path>>(path: T, flags: OpenFlags) -> Result<Connection> {
|
pub fn open_with_flags<T: AsRef<Path>>(path: T, flags: OpenFlags) -> Result<Connection> {
|
||||||
let mut raw = 0 as *mut _;
|
let mut raw = 0 as *mut _;
|
||||||
unsafe {
|
unsafe {
|
||||||
ok!(ffi::sqlite3_open_v2(
|
let ret = ffi::sqlite3_open_v2(
|
||||||
path_to_cstr!(path.as_ref()).as_ptr(),
|
path_to_cstr!(path.as_ref()).as_ptr(),
|
||||||
&mut raw,
|
&mut raw,
|
||||||
flags.0,
|
flags.0,
|
||||||
0 as *const _,
|
0 as *const _ );
|
||||||
));
|
|
||||||
|
// Explicitly close the connection on error.
|
||||||
|
// This is a quirk of the C API, where the database handle
|
||||||
|
// (raw) is unconditionally allocated.
|
||||||
|
match ret {
|
||||||
|
ffi::SQLITE_OK => {},
|
||||||
|
code => {
|
||||||
|
ffi::sqlite3_close(raw);
|
||||||
|
return Err(::Error {
|
||||||
|
code: Some(code as isize),
|
||||||
|
message: None
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(Connection {
|
Ok(Connection {
|
||||||
raw: raw,
|
raw: raw,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user