directory: update do its work inside a thread
A lot of the preparation was needed (and done in previous months) in making update thread-safe, but here it is. This was the first thing I made work inside a thread when I started mpd-uclinux many years ago, and also the last thing I've done in mainline mpd to work inside a thread, go figure.
This commit is contained in:

committed by
Max Kellermann

parent
0f0ac43b8f
commit
3f0ae13c4b
@@ -819,13 +819,10 @@ static int listHandleUpdate(struct client *client,
|
||||
char *argv[],
|
||||
struct strnode *cmdnode, CommandEntry * cmd)
|
||||
{
|
||||
static List *pathList;
|
||||
List *pathList = makeList(NULL, 1);
|
||||
CommandEntry *nextCmd = NULL;
|
||||
struct strnode *next = cmdnode->next;
|
||||
|
||||
if (!pathList)
|
||||
pathList = makeList(NULL, 1);
|
||||
|
||||
if (argc == 2)
|
||||
insertInList(pathList, argv[1], NULL);
|
||||
else
|
||||
@@ -837,25 +834,9 @@ static int listHandleUpdate(struct client *client,
|
||||
|
||||
if (cmd != nextCmd) {
|
||||
int ret = updateInit(pathList);
|
||||
freeList(pathList);
|
||||
pathList = NULL;
|
||||
|
||||
switch (ret) {
|
||||
case 0:
|
||||
if (ret == -1)
|
||||
command_error(client, ACK_ERROR_UPDATE_ALREADY,
|
||||
"already updating");
|
||||
break;
|
||||
|
||||
case -1:
|
||||
command_error(client, ACK_ERROR_SYSTEM,
|
||||
"problems trying to update");
|
||||
break;
|
||||
|
||||
default:
|
||||
client_printf(client, "updating_db: %i\n", ret);
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -872,26 +853,10 @@ static int handleUpdate(struct client *client,
|
||||
List *pathList = makeList(NULL, 1);
|
||||
insertInList(pathList, argv[1], NULL);
|
||||
ret = updateInit(pathList);
|
||||
freeList(pathList);
|
||||
} else
|
||||
ret = updateInit(NULL);
|
||||
|
||||
switch (ret) {
|
||||
case 0:
|
||||
command_error(client, ACK_ERROR_UPDATE_ALREADY,
|
||||
"already updating");
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
case -1:
|
||||
command_error(client, ACK_ERROR_SYSTEM,
|
||||
"problems trying to update");
|
||||
break;
|
||||
|
||||
default:
|
||||
client_printf(client, "updating_db: %i\n", ret);
|
||||
ret = 0;
|
||||
break;
|
||||
if (ret == -1)
|
||||
command_error(client, ACK_ERROR_UPDATE_ALREADY,
|
||||
"already updating");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user