summaryrefslogtreecommitdiffstats
path: root/base/ca/src/com/netscape/ca/CRLIssuingPoint.java
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2012-09-25 21:40:04 -0500
committerEndi Sukma Dewata <edewata@vm-117.idm.lab.bos.redhat.com>2012-10-18 18:32:49 -0400
commit58af6e4b6869c2e5ee96117f3f794ff9eebd9c90 (patch)
tree56d07923b9555105f080960d44a45ca73e047da8 /base/ca/src/com/netscape/ca/CRLIssuingPoint.java
parenteee334478cd8907f136d07e6b7a58232411cd00f (diff)
downloadpki-58af6e4b6869c2e5ee96117f3f794ff9eebd9c90.tar.gz
pki-58af6e4b6869c2e5ee96117f3f794ff9eebd9c90.tar.xz
pki-58af6e4b6869c2e5ee96117f3f794ff9eebd9c90.zip
Fixed synchronization problem in CertificateRepository.ticket-365
Some synchronized methods in CertificateRepository may block modifyCeritifcateRecord() too long, so they have been moved back into CRLIssuingPoint and CertStatusUpdateThread. Ticket #313
Diffstat (limited to 'base/ca/src/com/netscape/ca/CRLIssuingPoint.java')
-rw-r--r--base/ca/src/com/netscape/ca/CRLIssuingPoint.java26
1 files changed, 25 insertions, 1 deletions
diff --git a/base/ca/src/com/netscape/ca/CRLIssuingPoint.java b/base/ca/src/com/netscape/ca/CRLIssuingPoint.java
index c29bc326d..db30d3988 100644
--- a/base/ca/src/com/netscape/ca/CRLIssuingPoint.java
+++ b/base/ca/src/com/netscape/ca/CRLIssuingPoint.java
@@ -62,6 +62,8 @@ import com.netscape.certsrv.common.Constants;
import com.netscape.certsrv.common.NameValuePairs;
import com.netscape.certsrv.dbs.EDBNotAvailException;
import com.netscape.certsrv.dbs.IElementProcessor;
+import com.netscape.certsrv.dbs.certdb.ICertRecord;
+import com.netscape.certsrv.dbs.certdb.ICertRecordList;
import com.netscape.certsrv.dbs.certdb.ICertificateRepository;
import com.netscape.certsrv.dbs.certdb.IRevocationInfo;
import com.netscape.certsrv.dbs.crldb.ICRLIssuingPointRecord;
@@ -1868,7 +1870,29 @@ public class CRLIssuingPoint implements ICRLIssuingPoint, Runnable {
*/
public void processRevokedCerts(IElementProcessor p)
throws EBaseException {
- mCertRepository.processRevokedCerts(p, getFilter(), mPageSize);
+ CertRecProcessor cp = (CertRecProcessor) p;
+ String filter = getFilter();
+
+ // NOTE: dangerous cast.
+ // correct way would be to modify interface and add
+ // accessor but we don't want to touch the interface
+ CertificateRepository cr = (CertificateRepository) mCertRepository;
+
+ synchronized (cr.certStatusUpdateTask) {
+ CMS.debug("Starting processRevokedCerts (entered lock)");
+ ICertRecordList list = mCertRepository.findCertRecordsInList(
+ filter,
+ new String[] {
+ ICertRecord.ATTR_ID, ICertRecord.ATTR_REVO_INFO, "objectclass"
+ },
+ "serialno",
+ mPageSize);
+
+ int totalSize = list.getSize();
+
+ list.processCertRecords(0, totalSize - 1, cp);
+ CMS.debug("processRevokedCerts done");
+ }
}
/**