[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