mirror of
https://github.com/fluencelabs/sqlite-wasm-connector
synced 2025-03-15 06:20:50 +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> {
|
||||
let mut raw = 0 as *mut _;
|
||||
unsafe {
|
||||
ok!(ffi::sqlite3_open_v2(
|
||||
let ret = ffi::sqlite3_open_v2(
|
||||
path_to_cstr!(path.as_ref()).as_ptr(),
|
||||
&mut raw,
|
||||
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 {
|
||||
raw: raw,
|
||||
|
Loading…
x
Reference in New Issue
Block a user