[Openvas-commits] r13778 - in trunk/openvas-manager: . src
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Tue Jul 24 18:44:56 CEST 2012
Author: mattm
Date: 2012-07-24 18:44:55 +0200 (Tue, 24 Jul 2012)
New Revision: 13778
Modified:
trunk/openvas-manager/ChangeLog
trunk/openvas-manager/src/omp.c
Log:
* src/omp.c (omp_xml_handle_end_element): In CLIENT_GET_REPORTS cleanup
the iterator early when a particular report was requested. This allows
the main manager process to lock the database for task scheduling during
generation of large reports. Also remove two stray cleanup_iterator
calls.
Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog 2012-07-24 12:54:49 UTC (rev 13777)
+++ trunk/openvas-manager/ChangeLog 2012-07-24 16:44:55 UTC (rev 13778)
@@ -1,3 +1,11 @@
+2012-07-24 Matthew Mundell <matthew.mundell at greenbone.net>
+
+ * src/omp.c (omp_xml_handle_end_element): In CLIENT_GET_REPORTS cleanup
+ the iterator early when a particular report was requested. This allows
+ the main manager process to lock the database for task scheduling during
+ generation of large reports. Also remove two stray cleanup_iterator
+ calls.
+
2012-07-23 Matthew Mundell <matthew.mundell at greenbone.net>
* src/ompd.c (serve_omp): Correct comment typo.
Modified: trunk/openvas-manager/src/omp.c
===================================================================
--- trunk/openvas-manager/src/omp.c 2012-07-24 12:54:49 UTC (rev 13777)
+++ trunk/openvas-manager/src/omp.c 2012-07-24 16:44:55 UTC (rev 13778)
@@ -9276,7 +9276,6 @@
if (ret)
{
internal_error_send_to_client (error);
- cleanup_iterator (&reports);
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -9352,7 +9351,6 @@
if (ret)
{
internal_error_send_to_client (error);
- cleanup_iterator (&reports);
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -9393,6 +9391,12 @@
g_free (extension);
g_free (content_type);
+ /* If there's just one report then cleanup the iterator early. This
+ * closes the iterator transaction, allowing manage_schedule to lock
+ * the db during generation of large reports. */
+ if (request_report)
+ cleanup_iterator (&reports);
+
ret = manage_send_report (report,
delta_report,
report_format,
@@ -9441,7 +9445,8 @@
return;
}
internal_error_send_to_client (error);
- cleanup_iterator (&reports);
+ if (request_report == 0)
+ cleanup_iterator (&reports);
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -9451,7 +9456,8 @@
SEND_TO_CLIENT_OR_FAIL
(XML_INTERNAL_ERROR ("get_reports"));
internal_error_send_to_client (error);
- cleanup_iterator (&reports);
+ if (request_report == 0)
+ cleanup_iterator (&reports);
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -9460,7 +9466,8 @@
else
{
internal_error_send_to_client (error);
- cleanup_iterator (&reports);
+ if (request_report == 0)
+ cleanup_iterator (&reports);
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
@@ -9468,8 +9475,13 @@
}
if (get_reports_data->alert_id == NULL)
SEND_TO_CLIENT_OR_FAIL ("</report>");
+
+ if (request_report)
+ /* Just to be safe, because iterator has been freed. */
+ break;
}
- cleanup_iterator (&reports);
+ if (request_report == 0)
+ cleanup_iterator (&reports);
if (get_reports_data->alert_id)
SEND_TO_CLIENT_OR_FAIL (XML_OK ("get_reports"));
More information about the Openvas-commits
mailing list