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:
Eric Wong
2008-09-23 22:37:18 +02:00
committed by Max Kellermann
parent 0f0ac43b8f
commit 3f0ae13c4b
5 changed files with 60 additions and 152 deletions

View File

@@ -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;