diff options
author | Eric Wong <normalperson@yhbt.net> | 2008-09-23 22:37:18 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-09-23 22:37:18 +0200 |
commit | 3f0ae13c4b409bcf39d926f5e73d5eb0feff6eb3 (patch) | |
tree | b01aacd0c3c3ab7f7018830d630ada1d9d3838ae /src/command.c | |
parent | 0f0ac43b8fa4dfecad5548cde42152dba8d9a652 (diff) | |
download | mpd-3f0ae13c4b409bcf39d926f5e73d5eb0feff6eb3.tar.gz mpd-3f0ae13c4b409bcf39d926f5e73d5eb0feff6eb3.tar.xz mpd-3f0ae13c4b409bcf39d926f5e73d5eb0feff6eb3.zip |
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.
Diffstat (limited to 'src/command.c')
-rw-r--r-- | src/command.c | 47 |
1 files changed, 6 insertions, 41 deletions
diff --git a/src/command.c b/src/command.c index 2e45d6d25..0cd115cc5 100644 --- a/src/command.c +++ b/src/command.c @@ -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; |