Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
28c5e7e6
Commit
28c5e7e6
authored
7 years ago
by
Max Kellermann
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'v0.20.x'
parents
dbfc4abf
ff624075
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
3 deletions
+22
-3
NEWS
NEWS
+5
-0
StorageState.cxx
src/storage/StorageState.cxx
+17
-3
No files found.
NEWS
View file @
28c5e7e6
...
...
@@ -19,6 +19,11 @@ ver 0.21 (not yet released)
- sndio: new mixer plugin
* require GCC 5.0
ver 0.20.15 (not yet released)
* state file
- make mount point restore errors non-fatal
- fix crash when restoring mounts with incompatible database plugin
ver 0.20.14 (2018/01/01)
* database
- simple: fix file corruption in the presence of mount points
...
...
This diff is collapsed.
Click to expand it.
src/storage/StorageState.cxx
View file @
28c5e7e6
...
...
@@ -47,6 +47,9 @@ static constexpr Domain storage_domain("storage");
void
storage_state_save
(
BufferedOutputStream
&
os
,
const
Instance
&
instance
)
{
if
(
instance
.
storage
==
nullptr
)
return
;
const
auto
visitor
=
[
&
os
](
const
char
*
mount_uri
,
const
Storage
&
storage
)
{
std
::
string
uri
=
storage
.
MapUTF8
(
""
);
if
(
uri
.
empty
()
||
StringIsEmpty
(
mount_uri
))
...
...
@@ -84,6 +87,12 @@ storage_state_restore(const char *line, TextFile &file, Instance &instance)
FormatError
(
storage_domain
,
"Unrecognized line in mountpoint state: %s"
,
line
);
}
if
(
instance
.
storage
==
nullptr
)
/* without storage (a CompositeStorage instance), we
cannot mount, and therefore we silently ignore the
state file */
return
true
;
if
(
url
.
empty
()
||
uri
.
empty
())
{
LogError
(
storage_domain
,
"Missing value in mountpoint state."
);
return
true
;
...
...
@@ -98,16 +107,18 @@ storage_state_restore(const char *line, TextFile &file, Instance &instance)
return
true
;
}
#ifdef ENABLE_DATABASE
Database
*
db
=
instance
.
database
;
if
(
db
!=
nullptr
&&
db
->
IsPlugin
(
simple_db_plugin
))
{
try
{
((
SimpleDatabase
*
)
db
)
->
Mount
(
uri
.
c_str
(),
url
.
c_str
());
}
catch
(...)
{
throw
;
delete
storage
;
FormatError
(
std
::
current_exception
(),
"Failed to restore mount to %s"
,
url
.
c_str
());
return
true
;
}
}
#endif
((
CompositeStorage
*
)
instance
.
storage
)
->
Mount
(
uri
.
c_str
(),
storage
);
...
...
@@ -117,6 +128,9 @@ storage_state_restore(const char *line, TextFile &file, Instance &instance)
unsigned
storage_state_get_hash
(
const
Instance
&
instance
)
{
if
(
instance
.
storage
==
nullptr
)
return
0
;
std
::
set
<
std
::
string
>
mounts
;
const
auto
visitor
=
[
&
mounts
](
const
char
*
mount_uri
,
const
Storage
&
storage
)
{
...
...
This diff is collapsed.
Click to expand it.
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