You need to sign in or sign up before continuing.
Commit 5ea8e2d6 authored by Warren Dukes's avatar Warren Dukes

don't stat() the db to get the modtime everytime, instead store it when we read the db

git-svn-id: https://svn.musicpd.org/mpd/trunk@779 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent be3e2f08
......@@ -70,7 +70,9 @@ typedef struct _Directory {
Directory * mp3rootDirectory = NULL;
char * directorydb;
char * directory_db;
time_t directory_dbModTime = 0;
volatile int directory_updatePid = 0;
......@@ -140,10 +142,16 @@ void directory_sigChldHandler(int pid, int status) {
void readDirectoryDBIfUpdateIsFinished() {
if(directory_reReadDB && 0==directory_updatePid) {
struct stat st;
DEBUG("readDirectoryDB since update finished successfully\n");
readDirectoryDB();
incrPlaylistVersion();
directory_reReadDB = 0;
if(stat(directory_db,&st)==0) {
directory_dbModTime = st.st_mtime;
}
}
}
......@@ -182,7 +190,7 @@ int updateInit(FILE * fp, List * pathList) {
ignoreSignals();
if(writeDirectoryDB()<0) {
ERROR("problems writing music db file, \"%s\"\n",
directorydb);
directory_db);
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
......@@ -790,7 +798,7 @@ int writeDirectoryDB() {
deleteEmptyDirectoriesInDirectory(mp3rootDirectory);
sortDirectory(mp3rootDirectory);
while(!(fp=fopen(directorydb,"w")) && errno==EINTR);
while(!(fp=fopen(directory_db,"w")) && errno==EINTR);
if(!fp) return -1;
/* block signals when writing the db so we don't get a corrupted db*/
......@@ -810,7 +818,7 @@ int readDirectoryDB() {
FILE * fp;
if(!mp3rootDirectory) mp3rootDirectory = newDirectory(NULL,0);
while(!(fp=fopen(directorydb,"r")) && errno==EINTR);
while(!(fp=fopen(directory_db,"r")) && errno==EINTR);
if(!fp) return -1;
/* get initial info */
......@@ -898,7 +906,7 @@ int updateMp3Directory(FILE * fp) {
}
if(writeDirectoryDB()<0) {
ERROR("problems writing music db file, \"%s\"\n",directorydb);
ERROR("problems writing music db file, \"%s\"\n",directory_db);
myfprintf(fp,"%s problems writing music db\n",COMMAND_RESPOND_ERROR);
return -1;
}
......@@ -1124,10 +1132,14 @@ unsigned long sumSongTimesIn(FILE * fp, char * name) {
}
void initMp3Directory() {
struct stat st;
mp3rootDirectory = newDirectory(NULL,0);
exploreDirectory(mp3rootDirectory);
stats.numberOfSongs = countSongsIn(stderr,NULL);
stats.dbPlayTime = sumSongTimesIn(stderr,NULL);
if(stat(directory_db,&st)==0) directory_dbModTime = st.st_mtime;
}
Song * getSongDetails(char * file, char ** shortnameRet,
......@@ -1175,11 +1187,6 @@ Song * getSong(char * file) {
}
time_t getDbModTime() {
time_t mtime = 0;
struct stat st;
if(stat(directorydb,&st)==0) mtime = st.st_mtime;
return mtime;
return directory_dbModTime;
}
/* vim:set shiftwidth=4 tabstop=8 expandtab: */
......@@ -27,7 +27,7 @@
#include <stdio.h>
#include <sys/param.h>
extern char * directorydb;
extern char * directory_db;
void readDirectoryDBIfUpdateIsFinished();
......
......@@ -306,8 +306,8 @@ int main(int argc, char * argv[]) {
initTables();
initPlaylist();
if(!options.dbFile) directorydb = strdup(rpp2app(".mpddb"));
else directorydb = strdup(options.dbFile);
if(!options.dbFile) directory_db = strdup(rpp2app(".mpddb"));
else directory_db = strdup(options.dbFile);
if(options.createDB>0 || options.onlyCreateDB || readDirectoryDB()<0)
{
......
......@@ -142,5 +142,7 @@ int getPlayerBits();
int getPlayerChannels();
void playerCycleLogFiles();
#endif
/* vim:set shiftwidth=4 tabstop=8 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment