Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
node-sqlite3
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
node-sqlite3
Commits
9d4667f0
Commit
9d4667f0
authored
Nov 08, 2011
by
Konstantin Käfer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove last references to ev_
parent
c1b8cf36
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
24 deletions
+39
-24
async.h
src/async.h
+27
-14
database.cc
src/database.cc
+5
-5
scheduling.test.js
test/scheduling.test.js
+7
-5
No files found.
src/async.h
View file @
9d4667f0
...
...
@@ -2,12 +2,12 @@
#define NODE_SQLITE3_SRC_ASYNC_H
// Generic
e
v_async handler.
// Generic
u
v_async handler.
template
<
class
Item
,
class
Parent
>
class
Async
{
typedef
void
(
*
Callback
)(
Parent
*
parent
,
Item
*
item
);
protected
:
ev_async
watcher
;
uv_async_t
watcher
;
pthread_mutex_t
mutex
;
std
::
vector
<
Item
*>
data
;
Callback
callback
;
...
...
@@ -15,16 +15,15 @@ public:
Parent
*
parent
;
public
:
inline
Async
(
Parent
*
parent_
,
Callback
cb_
)
Async
(
Parent
*
parent_
,
Callback
cb_
)
:
callback
(
cb_
),
parent
(
parent_
)
{
watcher
.
data
=
this
;
ev_async_init
(
&
watcher
,
listener
);
ev_async_start
(
EV_DEFAULT_UC_
&
watcher
);
pthread_mutex_init
(
&
mutex
,
NULL
);
uv_async_init
(
uv_default_loop
(),
&
watcher
,
listener
);
}
static
void
listener
(
EV_P_
ev_async
*
w
,
int
revent
s
)
{
Async
*
async
=
static_cast
<
Async
*>
(
w
->
data
);
static
void
listener
(
uv_async_t
*
handle
,
int
statu
s
)
{
Async
*
async
=
static_cast
<
Async
*>
(
handle
->
data
);
std
::
vector
<
Item
*>
rows
;
pthread_mutex_lock
(
&
async
->
mutex
);
rows
.
swap
(
async
->
data
);
...
...
@@ -35,7 +34,23 @@ public:
}
}
inline
void
add
(
Item
*
item
)
{
static
void
close
(
uv_handle_t
*
handle
)
{
assert
(
handle
!=
NULL
);
assert
(
handle
->
data
!=
NULL
);
Async
*
async
=
static_cast
<
Async
*>
(
handle
->
data
);
delete
async
;
handle
->
data
=
NULL
;
}
void
finish
()
{
// Need to call the listener again to ensure all items have been
// processed. Is this a bug in uv_async? Feels like uv_close
// should handle that.
listener
(
&
watcher
,
0
);
uv_close
((
uv_handle_t
*
)
&
watcher
,
close
);
}
void
add
(
Item
*
item
)
{
// Make sure node runs long enough to deliver the messages.
uv_ref
(
uv_default_loop
());
pthread_mutex_lock
(
&
mutex
);
...
...
@@ -43,19 +58,17 @@ public:
pthread_mutex_unlock
(
&
mutex
);
}
inline
void
send
()
{
ev_async_send
(
EV_DEFAULT_
&
watcher
);
void
send
()
{
uv_async_send
(
&
watcher
);
}
inline
void
send
(
Item
*
item
)
{
void
send
(
Item
*
item
)
{
add
(
item
);
send
();
}
inline
~
Async
()
{
ev_invoke
(
EV_DEFAULT_UC_
&
watcher
,
ev_async_pending
(
&
watcher
));
~
Async
()
{
pthread_mutex_destroy
(
&
mutex
);
ev_async_stop
(
EV_DEFAULT_UC_
&
watcher
);
}
};
...
...
src/database.cc
View file @
9d4667f0
...
...
@@ -371,7 +371,7 @@ void Database::RegisterTraceCallback(Baton* baton) {
else
{
// Remove it.
sqlite3_trace
(
db
->
handle
,
NULL
,
NULL
);
d
elete
db
->
debug_trace
;
d
b
->
debug_trace
->
finish
()
;
db
->
debug_trace
=
NULL
;
}
...
...
@@ -408,7 +408,7 @@ void Database::RegisterProfileCallback(Baton* baton) {
else
{
// Remove it.
sqlite3_profile
(
db
->
handle
,
NULL
,
NULL
);
d
elete
db
->
debug_profile
;
d
b
->
debug_profile
->
finish
()
;
db
->
debug_profile
=
NULL
;
}
...
...
@@ -448,7 +448,7 @@ void Database::RegisterUpdateCallback(Baton* baton) {
else
{
// Remove it.
sqlite3_update_hook
(
db
->
handle
,
NULL
,
NULL
);
d
elete
db
->
update_event
;
d
b
->
update_event
->
finish
()
;
db
->
update_event
=
NULL
;
}
...
...
@@ -622,11 +622,11 @@ void Database::Work_AfterLoadExtension(uv_work_t* req) {
void
Database
::
RemoveCallbacks
()
{
if
(
debug_trace
)
{
de
lete
debug_trace
;
de
bug_trace
->
finish
()
;
debug_trace
=
NULL
;
}
if
(
debug_profile
)
{
de
lete
debug_profile
;
de
bug_profile
->
finish
()
;
debug_profile
=
NULL
;
}
}
test/scheduling.test.js
View file @
9d4667f0
...
...
@@ -43,14 +43,16 @@ exports['test scheduling a query with callback after the database was closed'] =
exports
[
'test running a query after the database was closed'
]
=
function
(
beforeExit
)
{
var
error
=
false
;
var
db
=
new
sqlite3
.
Database
(
':memory:'
);
db
.
on
(
'error'
,
function
(
err
)
{
var
stmt
=
db
.
prepare
(
"SELECT * FROM sqlite_master"
,
function
(
err
)
{
if
(
err
)
throw
err
;
db
.
close
(
function
(
err
)
{
assert
.
ok
(
err
);
error
=
true
;
assert
.
equal
(
err
.
message
,
"SQLITE_BUSY: unable to close due to unfinalised statements"
);
});
var
stmt
=
db
.
prepare
(
"CREATE TABLE foo (id int)"
);
db
.
close
();
stmt
.
run
();
});
});
beforeExit
(
function
()
{
assert
.
ok
(
error
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment