[Openvas-commits] r13780 - in branches/openvas-manager-3.0: . src
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Wed Jul 25 10:15:05 CEST 2012
Author: mwiegand
Date: 2012-07-25 10:15:05 +0200 (Wed, 25 Jul 2012)
New Revision: 13780
Modified:
branches/openvas-manager-3.0/ChangeLog
branches/openvas-manager-3.0/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. Backport from trunk r13778, initial commit by Matthew Mundell.
Modified: branches/openvas-manager-3.0/ChangeLog
===================================================================
--- branches/openvas-manager-3.0/ChangeLog 2012-07-25 06:18:53 UTC (rev 13779)
+++ branches/openvas-manager-3.0/ChangeLog 2012-07-25 08:15:05 UTC (rev 13780)
@@ -1,3 +1,11 @@
+2012-07-25 Michael Wiegand <michael.wiegand 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. Backport from trunk r13778, initial commit by Matthew Mundell.
+
2012-07-09 Michael Wiegand <michael.wiegand at greenbone.net>
* src/manage.c (manage_read_info): Replace g_strcasecmp with
Modified: branches/openvas-manager-3.0/src/omp.c
===================================================================
--- branches/openvas-manager-3.0/src/omp.c 2012-07-25 06:18:53 UTC (rev 13779)
+++ branches/openvas-manager-3.0/src/omp.c 2012-07-25 08:15:05 UTC (rev 13780)
@@ -8749,7 +8749,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;
@@ -8790,6 +8789,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,
@@ -8836,7 +8841,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;
@@ -8846,7 +8852,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;
@@ -8855,7 +8862,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;
@@ -8863,8 +8871,13 @@
}
if (get_reports_data->escalator_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->escalator_id)
SEND_TO_CLIENT_OR_FAIL (XML_OK ("get_reports"));
More information about the Openvas-commits
mailing list