Merge "config: Speed up config template lookup"
authorJoshua Colp <jcolp@digium.com>
Mon, 4 Dec 2017 14:51:11 +0000 (08:51 -0600)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Mon, 4 Dec 2017 14:51:11 +0000 (08:51 -0600)
channels/chan_skinny.c
main/config_options.c
main/xml.c
res/res_http_post.c

index aeb0605..6f4231a 100644 (file)
@@ -7426,6 +7426,11 @@ static void destroy_session(struct skinnysession *s)
        }
        ast_mutex_unlock(&s->lock);
        ast_mutex_destroy(&s->lock);
+
+       if (s->t != AST_PTHREADT_NULL) {
+               pthread_detach(s->t);
+       }
+
        ast_free(s);
 }
 
@@ -7512,11 +7517,6 @@ static void *skinny_session(void *data)
        int eventmessage = 0;
        struct pollfd fds[1];
 
-       if (!s) {
-               ast_log(LOG_WARNING, "Bad Skinny Session\n");
-               return 0;
-       }
-
        ast_log(LOG_NOTICE, "Starting Skinny session from %s\n", ast_inet_ntoa(s->sin.sin_addr));
 
        pthread_cleanup_push(skinny_session_cleanup, s);
@@ -7682,6 +7682,7 @@ static void *accept_thread(void *ignore)
                s->keepalive_timeout_sched = -1;
 
                if (ast_pthread_create(&s->t, NULL, skinny_session, s)) {
+                       s->t = AST_PTHREADT_NULL;
                        destroy_session(s);
                }
        }
index 3c0959e..a9a145b 100644 (file)
@@ -998,11 +998,11 @@ static int xmldoc_update_config_type(const char *module, const char *name, const
 
        /* If we already have a syntax element, bail. This isn't an error, since we may unload a module which
         * has updated the docs and then load it again. */
-       if ((results = ast_xmldoc_query("//configInfo[@name='%s']/*/configObject[@name='%s']/syntax", module, name))) {
+       if ((results = ast_xmldoc_query("/docs/configInfo[@name='%s']/configFile/configObject[@name='%s']/syntax", module, name))) {
                return 0;
        }
 
-       if (!(results = ast_xmldoc_query("//configInfo[@name='%s']/*/configObject[@name='%s']", module, name))) {
+       if (!(results = ast_xmldoc_query("/docs/configInfo[@name='%s']/configFile/configObject[@name='%s']", module, name))) {
                ast_log(LOG_WARNING, "Cannot update type '%s' in module '%s' because it has no existing documentation!\n", name, module);
                return XMLDOC_STRICT ? -1 : 0;
        }
@@ -1068,7 +1068,7 @@ static int xmldoc_update_config_option(struct aco_type **types, const char *modu
                return XMLDOC_STRICT ? -1 : 0;
        }
 
-       if (!(results = ast_xmldoc_query("//configInfo[@name='%s']/*/configObject[@name='%s']/configOption[@name='%s']", module, object_name, name))) {
+       if (!(results = ast_xmldoc_query("/docs/configInfo[@name='%s']/configFile/configObject[@name='%s']/configOption[@name='%s']", module, object_name, name))) {
                ast_log(LOG_WARNING, "Could not find option '%s' with type '%s' in module '%s'\n", name, object_name, module);
                return XMLDOC_STRICT ? -1 : 0;
        }
index d32a8c5..d476c1d 100644 (file)
@@ -96,6 +96,9 @@ struct ast_xml_doc *ast_xml_open(char *filename)
        ast_log(LOG_NOTICE, "XSLT support not found. XML documentation may be incomplete.\n");
 #endif /* HAVE_LIBXSLT */
 
+       /* Optimize for XPath */
+       xmlXPathOrderDocElems(doc);
+
        return (struct ast_xml_doc *) doc;
 }
 
index 9f5b183..dca18a6 100644 (file)
@@ -55,7 +55,7 @@
 #ifdef GMIME_TYPE_CONTENT_TYPE
 #define AST_GMIME_VER_24
 #endif
-#if GMIME_MAJOR_VERSION >= 3
+#if defined(GMIME_MAJOR_VERSION) && (GMIME_MAJOR_VERSION >= 3)
 #define AST_GMIME_VER_30
 #endif