From: Byron Jones Date: Wed, 5 Sep 2012 07:09:55 +0000 (+0800) Subject: Bug 749540: Avoid database deadlocks when deleting recent searches X-Git-Tag: bugzilla-4.4rc1~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7411bab11dd9cd9e00c0e93e91bbf80bbca6ba61;p=thirdparty%2Fbugzilla.git Bug 749540: Avoid database deadlocks when deleting recent searches r=dkl, a=LpSolit --- diff --git a/Bugzilla/Search/Recent.pm b/Bugzilla/Search/Recent.pm index 02c3ec37a5..1ff56c7e35 100644 --- a/Bugzilla/Search/Recent.pm +++ b/Bugzilla/Search/Recent.pm @@ -51,12 +51,13 @@ sub create { my $user_id = $search->user_id; # Enforce there only being SAVE_NUM_SEARCHES per user. - my $min_id = $dbh->selectrow_array( - 'SELECT id FROM profile_search WHERE user_id = ? ORDER BY id DESC ' - . $dbh->sql_limit(1, SAVE_NUM_SEARCHES), undef, $user_id); - if ($min_id) { - $dbh->do('DELETE FROM profile_search WHERE user_id = ? AND id <= ?', - undef, ($user_id, $min_id)); + my @ids = @{ $dbh->selectcol_arrayref( + "SELECT id FROM profile_search WHERE user_id = ? ORDER BY id", + undef, $user_id) }; + if (scalar(@ids) > SAVE_NUM_SEARCHES) { + splice(@ids, - SAVE_NUM_SEARCHES); + $dbh->do( + "DELETE FROM profile_search WHERE id IN (" . join(',', @ids) . ")"); } $dbh->bz_commit_transaction(); return $search;