Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Joshua
wendelin.core
Commits
b19b1ab2
Commit
b19b1ab2
authored
Mar 04, 2020
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
744dc883
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
7 additions
and
11 deletions
+7
-11
wcfs/client/wcfs.cpp
wcfs/client/wcfs.cpp
+7
-11
No files found.
wcfs/client/wcfs.cpp
View file @
b19b1ab2
...
...
@@ -301,22 +301,21 @@ error _Conn::close() {
// mappings to give EFAULT on access.
while
(
1
)
{
FileH
f
=
nil
;
bool
opening
,
closing
;
bool
opening
;
// pick up any fileh
wconn
.
_filehMu
.
Lock
();
if
(
!
wconn
.
_filehTab
.
empty
())
{
f
=
wconn
.
_filehTab
.
begin
()
->
second
;
opening
=
(
f
->
_state
<
_FileHOpened
);
closing
=
(
f
->
_state
>=
_FileHClosing
);
if
(
!
closing
)
f
->
_nopen
++
;
// the file is not closing - we'll close it ourselves.
}
wconn
.
_filehMu
.
Unlock
();
if
(
f
==
nil
)
break
;
// all closed
trace
(
"picked %s
\t
opening: %d"
,
v
(
f
),
opening
);
// if fileh was "opening" - wait for the open to complete before calling close.
if
(
opening
)
{
f
->
_openReady
.
recv
();
...
...
@@ -324,16 +323,13 @@ error _Conn::close() {
continue
;
// failed open; f should be removed from wconn._filehTab by Conn.open itself
}
// if fileh was not "closing" - close it ourselves (we pretended we opened it too).
// call close f under
// force fileh close.
// - virt_lock
// - wconn.atMu.R
// - wconn.filehMu unlocked
if
(
!
closing
)
{
err
=
f
->
_closeLocked
(
/*force=*/
true
);
if
(
err
!=
nil
)
reterr1
(
err
);
}
err
=
f
->
_closeLocked
(
/*force=*/
true
);
if
(
err
!=
nil
)
reterr1
(
err
);
// wait for f close to complete, as it might be that f.close was called
// simultaneously to us or just before. f is removed from
...
...
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