mirror of https://github.com/BOINC/boinc.git
MGR: If Firefox 3 SQL query fails because cookie database is locked, make a temporary copy of the cookie file and query that
svn path=/trunk/boinc/; revision=23629
This commit is contained in:
parent
62b379eeaa
commit
0391e09260
|
@ -3237,3 +3237,11 @@ Charlie 2 Jun 2011
|
|||
mac_build/
|
||||
boinc.xcodeproj/
|
||||
project.pbxproj
|
||||
|
||||
Charlie 2 Jun 2011
|
||||
- MGR: If Firefox 3 SQL query fails because cookie database is locked,
|
||||
make a temporary copy of the cookie file and query that. This works
|
||||
around a bug in some builds of Firefox 3.5.x.
|
||||
|
||||
clientgui/
|
||||
browser.cpp
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "mfile.h"
|
||||
#include "miofile.h"
|
||||
#include "str_util.h"
|
||||
#include "filesys.h"
|
||||
#include "browser.h"
|
||||
|
||||
|
||||
|
@ -600,7 +601,9 @@ bool detect_cookie_mozilla_v3(
|
|||
std::string profile_root, std::string& project_url, std::string& name, std::string& value
|
||||
) {
|
||||
bool retval = false;
|
||||
std::string tmp;
|
||||
bool firstpass = true;
|
||||
std::string cookieFilePath;
|
||||
std::string cookieCopyFilePath;
|
||||
std::string hostname;
|
||||
char query[1024];
|
||||
sqlite3* db;
|
||||
|
@ -618,11 +621,13 @@ bool detect_cookie_mozilla_v3(
|
|||
|
||||
|
||||
// now we should open up the cookie database.
|
||||
tmp = profile_root + "cookies.sqlite";
|
||||
rc = sqlite3_open(tmp.c_str(), &db);
|
||||
cookieFilePath = profile_root + "cookies.sqlite";
|
||||
retry:
|
||||
rc = sqlite3_open(cookieFilePath.c_str(), &db);
|
||||
if ( rc ) {
|
||||
sqlite3_close(db);
|
||||
return false;
|
||||
retval = false;
|
||||
goto cleanUpCopy;
|
||||
}
|
||||
|
||||
// construct SQL query to extract the desired cookie
|
||||
|
@ -642,11 +647,28 @@ bool detect_cookie_mozilla_v3(
|
|||
// cleanup
|
||||
sqlite3_close(db);
|
||||
|
||||
if (((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED)) && firstpass) {
|
||||
firstpass = false;
|
||||
cookieCopyFilePath = profile_root + "boinc_cookies.sqlite";
|
||||
rc = boinc_copy(cookieFilePath.c_str(), cookieCopyFilePath.c_str());
|
||||
if (rc) {
|
||||
retval = false;
|
||||
goto cleanUpCopy;
|
||||
}
|
||||
cookieFilePath = cookieCopyFilePath;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
if ( !cookie.value.empty() ) {
|
||||
value = cookie.value;
|
||||
retval = true;
|
||||
}
|
||||
|
||||
cleanUpCopy:
|
||||
if (!firstpass) {
|
||||
boinc_delete_file(cookieCopyFilePath.c_str());
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue