[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