KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17
System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64
User : nobody ( 99)
PHP Version : 5.2.17
Disable Function : NONE
Directory :  /usr/share/devhelp/books/dbus/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/devhelp/books/dbus/api/dbus-connection_8c-source.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>D-Bus: dbus-connection.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul></div>
<h1>dbus-connection.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */</span>
<a name="l00002"></a>00002 <span class="comment">/* dbus-connection.c DBusConnection object</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002-2006  Red Hat Inc.</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> * Licensed under the Academic Free License version 2.1</span>
<a name="l00007"></a>00007 <span class="comment"> * </span>
<a name="l00008"></a>00008 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
<a name="l00009"></a>00009 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
<a name="l00010"></a>00010 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00011"></a>00011 <span class="comment"> * (at your option) any later version.</span>
<a name="l00012"></a>00012 <span class="comment"> *</span>
<a name="l00013"></a>00013 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
<a name="l00014"></a>00014 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00015"></a>00015 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00016"></a>00016 <span class="comment"> * GNU General Public License for more details.</span>
<a name="l00017"></a>00017 <span class="comment"> * </span>
<a name="l00018"></a>00018 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00019"></a>00019 <span class="comment"> * along with this program; if not, write to the Free Software</span>
<a name="l00020"></a>00020 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
<a name="l00021"></a>00021 <span class="comment"> *</span>
<a name="l00022"></a>00022 <span class="comment"> */</span>
<a name="l00023"></a>00023 
<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "dbus-shared.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "dbus-connection.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "dbus-list.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "dbus-timeout.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "dbus-transport.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "dbus-watch.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "dbus-connection-internal.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "dbus-pending-call-internal.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "dbus-list.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "dbus-hash.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "dbus-message-internal.h"</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "dbus-threads.h"</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "dbus-protocol.h"</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "dbus-dataslot.h"</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "dbus-string.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include "dbus-pending-call.h"</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include "dbus-object-tree.h"</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "dbus-threads-internal.h"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "dbus-bus.h"</span>
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="preprocessor">#ifdef DBUS_DISABLE_CHECKS</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define TOOK_LOCK_CHECK(connection)</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define RELEASING_LOCK_CHECK(connection)</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define HAVE_LOCK_CHECK(connection)</span>
<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define TOOK_LOCK_CHECK(connection) do {                \</span>
<a name="l00051"></a>00051 <span class="preprocessor">    _dbus_assert (!(connection)-&gt;have_connection_lock); \</span>
<a name="l00052"></a>00052 <span class="preprocessor">    (connection)-&gt;have_connection_lock = TRUE;          \</span>
<a name="l00053"></a>00053 <span class="preprocessor">  } while (0)</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define RELEASING_LOCK_CHECK(connection) do {            \</span>
<a name="l00055"></a>00055 <span class="preprocessor">    _dbus_assert ((connection)-&gt;have_connection_lock);   \</span>
<a name="l00056"></a>00056 <span class="preprocessor">    (connection)-&gt;have_connection_lock = FALSE;          \</span>
<a name="l00057"></a>00057 <span class="preprocessor">  } while (0)</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define HAVE_LOCK_CHECK(connection)        _dbus_assert ((connection)-&gt;have_connection_lock)</span>
<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="comment">/* A "DO_NOT_HAVE_LOCK_CHECK" is impossible since we need the lock to check the flag */</span>
<a name="l00060"></a>00060 <span class="preprocessor">#endif</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span>
<a name="l00062"></a>00062 <span class="preprocessor">#define TRACE_LOCKS 1</span>
<a name="l00063"></a>00063 <span class="preprocessor"></span>
<a name="l00064"></a>00064 <span class="preprocessor">#define CONNECTION_LOCK(connection)   do {                                      \</span>
<a name="l00065"></a>00065 <span class="preprocessor">    if (TRACE_LOCKS) { _dbus_verbose ("  LOCK: %s\n", _DBUS_FUNCTION_NAME); }   \</span>
<a name="l00066"></a>00066 <span class="preprocessor">    _dbus_mutex_lock ((connection)-&gt;mutex);                                      \</span>
<a name="l00067"></a>00067 <span class="preprocessor">    TOOK_LOCK_CHECK (connection);                                               \</span>
<a name="l00068"></a>00068 <span class="preprocessor">  } while (0)</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span>
<a name="l00070"></a>00070 <span class="preprocessor">#define CONNECTION_UNLOCK(connection) do {                                              \</span>
<a name="l00071"></a>00071 <span class="preprocessor">    if (TRACE_LOCKS) { _dbus_verbose ("  UNLOCK: %s\n", _DBUS_FUNCTION_NAME);  }        \</span>
<a name="l00072"></a>00072 <span class="preprocessor">    RELEASING_LOCK_CHECK (connection);                                                  \</span>
<a name="l00073"></a>00073 <span class="preprocessor">    _dbus_mutex_unlock ((connection)-&gt;mutex);                                            \</span>
<a name="l00074"></a>00074 <span class="preprocessor">  } while (0)</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span>
<a name="l00076"></a>00076 <span class="preprocessor">#define DISPATCH_STATUS_NAME(s)                                            \</span>
<a name="l00077"></a>00077 <span class="preprocessor">                     ((s) == DBUS_DISPATCH_COMPLETE ? "complete" :         \</span>
<a name="l00078"></a>00078 <span class="preprocessor">                      (s) == DBUS_DISPATCH_DATA_REMAINS ? "data remains" : \</span>
<a name="l00079"></a>00079 <span class="preprocessor">                      (s) == DBUS_DISPATCH_NEED_MEMORY ? "need memory" :   \</span>
<a name="l00080"></a>00080 <span class="preprocessor">                      "???")</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span>
<a name="l00202"></a><a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">00202</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structDBusMessageFilter.html">DBusMessageFilter</a> <a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a>;
<a name="l00203"></a>00203 
<a name="l00207"></a><a class="code" href="structDBusMessageFilter.html">00207</a> <span class="keyword">struct </span><a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a>
<a name="l00208"></a>00208 {
<a name="l00209"></a><a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">00209</a>   <a class="code" href="structDBusAtomic.html">DBusAtomic</a> <a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>; 
<a name="l00210"></a><a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">00210</a>   <a class="code" href="group__DBusConnection.html#g5cbcefc9b79af6e468eba14d0d7197b2">DBusHandleMessageFunction</a> <a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a>; 
<a name="l00211"></a><a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">00211</a>   <span class="keywordtype">void</span> *<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a>; 
<a name="l00212"></a><a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">00212</a>   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> <a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>; 
<a name="l00213"></a>00213 };
<a name="l00214"></a>00214 
<a name="l00215"></a>00215 
<a name="l00219"></a><a class="code" href="structDBusPreallocatedSend.html">00219</a> <span class="keyword">struct </span><a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a>
<a name="l00220"></a>00220 {
<a name="l00221"></a><a class="code" href="structDBusPreallocatedSend.html#465af3647772c89500df0b46f43d035b">00221</a>   <a class="code" href="structDBusConnection.html">DBusConnection</a> *<a class="code" href="structDBusPreallocatedSend.html#465af3647772c89500df0b46f43d035b">connection</a>; 
<a name="l00222"></a><a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">00222</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>;       
<a name="l00223"></a><a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">00223</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>;     
<a name="l00224"></a>00224 };
<a name="l00225"></a>00225 
<a name="l00226"></a>00226 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> _dbus_modify_sigpipe = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00227"></a>00227 
<a name="l00231"></a><a class="code" href="structDBusConnection.html">00231</a> <span class="keyword">struct </span><a class="code" href="structDBusConnection.html">DBusConnection</a>
<a name="l00232"></a>00232 {
<a name="l00233"></a><a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">00233</a>   <a class="code" href="structDBusAtomic.html">DBusAtomic</a> <a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>; 
<a name="l00235"></a><a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">00235</a>   <a class="code" href="group__DBusThreads.html#g4eb021cd6cd0830423eac2738e0ddc40">DBusMutex</a> *<a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>; 
<a name="l00237"></a><a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">00237</a>   <a class="code" href="group__DBusThreads.html#g4eb021cd6cd0830423eac2738e0ddc40">DBusMutex</a> *<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>;     
<a name="l00238"></a><a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">00238</a>   <a class="code" href="group__DBusThreads.html#ga14cd16a336a85b5edbca3c237c3829e">DBusCondVar</a> *<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>;    
<a name="l00239"></a><a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">00239</a>   <a class="code" href="group__DBusThreads.html#g4eb021cd6cd0830423eac2738e0ddc40">DBusMutex</a> *<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>;      
<a name="l00240"></a><a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">00240</a>   <a class="code" href="group__DBusThreads.html#ga14cd16a336a85b5edbca3c237c3829e">DBusCondVar</a> *<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>;     
<a name="l00242"></a><a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">00242</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>; 
<a name="l00243"></a><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">00243</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>; 
<a name="l00245"></a><a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">00245</a>   <a class="code" href="structDBusMessage.html">DBusMessage</a> *<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>; 
<a name="l00249"></a><a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">00249</a>   <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a>;              
<a name="l00250"></a><a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">00250</a>   <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>;              
<a name="l00252"></a><a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">00252</a>   <a class="code" href="structDBusCounter.html">DBusCounter</a> *<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>; 
<a name="l00254"></a><a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">00254</a>   <a class="code" href="structDBusTransport.html">DBusTransport</a> *<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>;    
<a name="l00255"></a><a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">00255</a>   <a class="code" href="structDBusWatchList.html">DBusWatchList</a> *<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a>;      
<a name="l00256"></a><a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">00256</a>   <a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a>;   
<a name="l00258"></a><a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">00258</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>;        
<a name="l00260"></a><a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">00260</a>   <a class="code" href="structDBusDataSlotList.html">DBusDataSlotList</a> <a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">slot_list</a>;   
<a name="l00262"></a><a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">00262</a>   <a class="code" href="structDBusHashTable.html">DBusHashTable</a> *<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>;  
<a name="l00264"></a><a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">00264</a>   <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> <a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a>;       
<a name="l00265"></a><a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">00265</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>; 
<a name="l00267"></a><a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">00267</a>   <a class="code" href="group__DBusConnection.html#g8d21e6bab0bbca3efd2c6d5acb53d468">DBusWakeupMainFunction</a> <a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a>; 
<a name="l00268"></a><a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">00268</a>   <span class="keywordtype">void</span> *<a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">wakeup_main_data</a>; 
<a name="l00269"></a><a class="code" href="structDBusConnection.html#8da896126df262503431acd73638c917">00269</a>   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> <a class="code" href="structDBusConnection.html#8da896126df262503431acd73638c917">free_wakeup_main_data</a>; 
<a name="l00271"></a><a class="code" href="structDBusConnection.html#f6cbafdf80cd474c654fc226581900a2">00271</a>   <a class="code" href="group__DBusConnection.html#gd888331dd2737769f669c5df779fe0ef">DBusDispatchStatusFunction</a> <a class="code" href="structDBusConnection.html#f6cbafdf80cd474c654fc226581900a2">dispatch_status_function</a>; 
<a name="l00272"></a><a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">00272</a>   <span class="keywordtype">void</span> *<a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">dispatch_status_data</a>; 
<a name="l00273"></a><a class="code" href="structDBusConnection.html#71f8b1e2078c4edb98c62de1886dfb2a">00273</a>   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> <a class="code" href="structDBusConnection.html#71f8b1e2078c4edb98c62de1886dfb2a">free_dispatch_status_data</a>; 
<a name="l00275"></a><a class="code" href="structDBusConnection.html#f3bbd2ecba171ebb8e952eaa030971d7">00275</a>   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> <a class="code" href="structDBusConnection.html#f3bbd2ecba171ebb8e952eaa030971d7">last_dispatch_status</a>; 
<a name="l00277"></a><a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">00277</a>   <a class="code" href="structDBusList.html">DBusList</a> *<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>; 
<a name="l00280"></a><a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">00280</a>   <a class="code" href="structDBusObjectTree.html">DBusObjectTree</a> *<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>; 
<a name="l00282"></a><a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">00282</a>   <span class="keywordtype">char</span> *<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a>; 
<a name="l00284"></a>00284   <span class="comment">/* These two MUST be bools and not bitfields, because they are protected by a separate lock</span>
<a name="l00285"></a>00285 <span class="comment">   * from connection-&gt;mutex and all bitfields in a word have to be read/written together.</span>
<a name="l00286"></a>00286 <span class="comment">   * So you can't have a different lock for different bitfields in the same word.</span>
<a name="l00287"></a>00287 <span class="comment">   */</span>
<a name="l00288"></a><a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">00288</a>   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> <a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>; 
<a name="l00289"></a><a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">00289</a>   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> <a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>;  
<a name="l00291"></a><a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">00291</a>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a> : 1; 
<a name="l00293"></a><a class="code" href="structDBusConnection.html#2a9f22339f90157f308a532462218404">00293</a>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#2a9f22339f90157f308a532462218404">exit_on_disconnect</a> : 1; 
<a name="l00295"></a><a class="code" href="structDBusConnection.html#b13bc36d7e6f91995768277ecbd5482c">00295</a>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#b13bc36d7e6f91995768277ecbd5482c">route_peer_messages</a> : 1; 
<a name="l00297"></a><a class="code" href="structDBusConnection.html#48d141d4311211e921571043bdbaeefb">00297</a>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#48d141d4311211e921571043bdbaeefb">disconnected_message_arrived</a> : 1;   
<a name="l00301"></a><a class="code" href="structDBusConnection.html#3b2707b9d10d0643f91a8e027ae118b5">00301</a>   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#3b2707b9d10d0643f91a8e027ae118b5">disconnected_message_processed</a> : 1; 
<a name="l00305"></a>00305 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00306"></a><a class="code" href="structDBusConnection.html#336a7953a4a28e55f6e6a07acfa11df3">00306</a> <span class="preprocessor"></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#336a7953a4a28e55f6e6a07acfa11df3">have_connection_lock</a> : 1; 
<a name="l00307"></a>00307 <span class="preprocessor">#endif</span>
<a name="l00308"></a>00308 <span class="preprocessor"></span>  
<a name="l00309"></a>00309 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00310"></a><a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">00310</a> <span class="preprocessor"></span>  <span class="keywordtype">int</span> <a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a>; 
<a name="l00311"></a>00311 <span class="preprocessor">#endif </span>
<a name="l00312"></a>00312 <span class="preprocessor"></span>};
<a name="l00313"></a>00313 
<a name="l00314"></a>00314 <span class="keyword">static</span> <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> _dbus_connection_get_dispatch_status_unlocked      (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00315"></a>00315 <span class="keyword">static</span> <span class="keywordtype">void</span>               _dbus_connection_update_dispatch_status_and_unlock (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection,
<a name="l00316"></a>00316                                                                               <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a>  new_status);
<a name="l00317"></a>00317 <span class="keyword">static</span> <span class="keywordtype">void</span>               _dbus_connection_last_unref                        (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00318"></a>00318 <span class="keyword">static</span> <span class="keywordtype">void</span>               _dbus_connection_acquire_dispatch                  (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00319"></a>00319 <span class="keyword">static</span> <span class="keywordtype">void</span>               _dbus_connection_release_dispatch                  (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00320"></a>00320 <span class="keyword">static</span> <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> _dbus_connection_flush_unlocked                    (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00321"></a>00321 <span class="keyword">static</span> <span class="keywordtype">void</span>               _dbus_connection_close_possibly_shared_and_unlock  (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00322"></a>00322 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>        _dbus_connection_get_is_connected_unlocked         (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection);
<a name="l00323"></a>00323 
<a name="l00324"></a>00324 <span class="keyword">static</span> <a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *
<a name="l00325"></a>00325 _dbus_message_filter_ref (<a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *filter)
<a name="l00326"></a>00326 {
<a name="l00327"></a>00327   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (filter-&gt;<a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l00328"></a>00328   <a class="code" href="group__DBusSysdeps.html#ge74c3fcf12acaeccdb152ef907de951c">_dbus_atomic_inc</a> (&amp;filter-&gt;<a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>);
<a name="l00329"></a>00329 
<a name="l00330"></a>00330   <span class="keywordflow">return</span> filter;
<a name="l00331"></a>00331 }
<a name="l00332"></a>00332 
<a name="l00333"></a>00333 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00334"></a>00334 _dbus_message_filter_unref (<a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *filter)
<a name="l00335"></a>00335 {
<a name="l00336"></a>00336   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (filter-&gt;<a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l00337"></a>00337 
<a name="l00338"></a>00338   <span class="keywordflow">if</span> (<a class="code" href="group__DBusSysdeps.html#g3c50a069f795dceeb9172fe2b517bbdc">_dbus_atomic_dec</a> (&amp;filter-&gt;<a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>) == 1)
<a name="l00339"></a>00339     {
<a name="l00340"></a>00340       <span class="keywordflow">if</span> (filter-&gt;<a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>)
<a name="l00341"></a>00341         (* filter-&gt;<a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>) (filter-&gt;<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a>);
<a name="l00342"></a>00342       
<a name="l00343"></a>00343       <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (filter);
<a name="l00344"></a>00344     }
<a name="l00345"></a>00345 }
<a name="l00346"></a>00346 
<a name="l00352"></a>00352 <span class="keywordtype">void</span>
<a name="l00353"></a><a class="code" href="group__DBusConnectionInternals.html#g4fe0c8f7b72dc89b9e1a3110db2f778e">00353</a> <a class="code" href="group__DBusConnectionInternals.html#g4fe0c8f7b72dc89b9e1a3110db2f778e">_dbus_connection_lock</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l00354"></a>00354 {
<a name="l00355"></a>00355   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l00356"></a>00356 }
<a name="l00357"></a>00357 
<a name="l00363"></a>00363 <span class="keywordtype">void</span>
<a name="l00364"></a><a class="code" href="group__DBusConnectionInternals.html#g3db10d48ec16e485d5a638aacebd4ad2">00364</a> <a class="code" href="group__DBusConnectionInternals.html#g3db10d48ec16e485d5a638aacebd4ad2">_dbus_connection_unlock</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l00365"></a>00365 {
<a name="l00366"></a>00366   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l00367"></a>00367 }
<a name="l00368"></a>00368 
<a name="l00376"></a>00376 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00377"></a>00377 _dbus_connection_wakeup_mainloop (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l00378"></a>00378 {
<a name="l00379"></a>00379   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a>)
<a name="l00380"></a>00380     (*connection-&gt;<a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a>) (connection-&gt;<a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">wakeup_main_data</a>);
<a name="l00381"></a>00381 }
<a name="l00382"></a>00382 
<a name="l00383"></a>00383 <span class="preprocessor">#ifdef DBUS_BUILD_TESTS</span>
<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="comment">/* For now this function isn't used */</span>
<a name="l00394"></a>00394 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00395"></a>00395 _dbus_connection_queue_received_message (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00396"></a>00396                                          <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message)
<a name="l00397"></a>00397 {
<a name="l00398"></a>00398   <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l00399"></a>00399 
<a name="l00400"></a>00400   link = <a class="code" href="group__DBusList.html#gc20b9981531cef590d49a59240344cd8">_dbus_list_alloc_link</a> (message);
<a name="l00401"></a>00401   <span class="keywordflow">if</span> (link == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00402"></a>00402     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00403"></a>00403 
<a name="l00404"></a>00404   <a class="code" href="group__DBusMessage.html#g984ff98c7d031a9ea9e90ede2140d395">dbus_message_ref</a> (message);
<a name="l00405"></a>00405   <a class="code" href="group__DBusConnectionInternals.html#gc1b92eba0aeee294dc28fcc260c9b749">_dbus_connection_queue_received_message_link</a> (connection, link);
<a name="l00406"></a>00406 
<a name="l00407"></a>00407   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00408"></a>00408 }
<a name="l00409"></a>00409 
<a name="l00422"></a>00422 <span class="keywordtype">void</span> 
<a name="l00423"></a>00423 _dbus_connection_test_get_locks (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00424"></a>00424                                  <a class="code" href="group__DBusThreads.html#g4eb021cd6cd0830423eac2738e0ddc40">DBusMutex</a>     **mutex_loc,
<a name="l00425"></a>00425                                  <a class="code" href="group__DBusThreads.html#g4eb021cd6cd0830423eac2738e0ddc40">DBusMutex</a>     **dispatch_mutex_loc,
<a name="l00426"></a>00426                                  <a class="code" href="group__DBusThreads.html#g4eb021cd6cd0830423eac2738e0ddc40">DBusMutex</a>     **io_path_mutex_loc,
<a name="l00427"></a>00427                                  <a class="code" href="group__DBusThreads.html#ga14cd16a336a85b5edbca3c237c3829e">DBusCondVar</a>   **dispatch_cond_loc,
<a name="l00428"></a>00428                                  <a class="code" href="group__DBusThreads.html#ga14cd16a336a85b5edbca3c237c3829e">DBusCondVar</a>   **io_path_cond_loc)
<a name="l00429"></a>00429 {
<a name="l00430"></a>00430   *mutex_loc = connection-&gt;<a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>;
<a name="l00431"></a>00431   *dispatch_mutex_loc = connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>;
<a name="l00432"></a>00432   *io_path_mutex_loc = connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>; 
<a name="l00433"></a>00433   *dispatch_cond_loc = connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>;
<a name="l00434"></a>00434   *io_path_cond_loc = connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>;
<a name="l00435"></a>00435 }
<a name="l00436"></a>00436 <span class="preprocessor">#endif</span>
<a name="l00437"></a>00437 <span class="preprocessor"></span>
<a name="l00446"></a>00446 <span class="keywordtype">void</span>
<a name="l00447"></a><a class="code" href="group__DBusConnectionInternals.html#gc1b92eba0aeee294dc28fcc260c9b749">00447</a> <a class="code" href="group__DBusConnectionInternals.html#gc1b92eba0aeee294dc28fcc260c9b749">_dbus_connection_queue_received_message_link</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l00448"></a>00448                                               <a class="code" href="structDBusList.html">DBusList</a>        *link)
<a name="l00449"></a>00449 {
<a name="l00450"></a>00450   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending;
<a name="l00451"></a>00451   <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> reply_serial;
<a name="l00452"></a>00452   <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l00453"></a>00453   
<a name="l00454"></a>00454   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusTransport.html#g251ff6d644e1dc6d46c58705e6dcc787">_dbus_transport_get_is_authenticated</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>));
<a name="l00455"></a>00455   
<a name="l00456"></a>00456   <a class="code" href="group__DBusList.html#g20e549175e2b8f450f907592dc39d953">_dbus_list_append_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l00457"></a>00457                           link);
<a name="l00458"></a>00458   message = link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l00459"></a>00459 
<a name="l00460"></a>00460   <span class="comment">/* If this is a reply we're waiting on, remove timeout for it */</span>
<a name="l00461"></a>00461   reply_serial = <a class="code" href="group__DBusMessage.html#g1d7466805d255a82109d4f71b1008ff2">dbus_message_get_reply_serial</a> (message);
<a name="l00462"></a>00462   <span class="keywordflow">if</span> (reply_serial != -1)
<a name="l00463"></a>00463     {
<a name="l00464"></a>00464       pending = <a class="code" href="group__DBusHashTable.html#g36ff49c4c35599e6fcdadc7f6805c49e">_dbus_hash_table_lookup_int</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>,
<a name="l00465"></a>00465                                              reply_serial);
<a name="l00466"></a>00466       <span class="keywordflow">if</span> (pending != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00467"></a>00467         {
<a name="l00468"></a>00468           <span class="keywordflow">if</span> (<a class="code" href="group__DBusPendingCallInternals.html#gf1e630b966722af540502329ed028254">_dbus_pending_call_is_timeout_added_unlocked</a> (pending))
<a name="l00469"></a>00469             <a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">_dbus_connection_remove_timeout_unlocked</a> (connection,
<a name="l00470"></a>00470                                                       <a class="code" href="group__DBusPendingCallInternals.html#ga9acac047b61c9a0eaff1977151e9e08">_dbus_pending_call_get_timeout_unlocked</a> (pending));
<a name="l00471"></a>00471 
<a name="l00472"></a>00472           <a class="code" href="group__DBusPendingCallInternals.html#gfea13f8b9977d341e41201c407adea2a">_dbus_pending_call_set_timeout_added_unlocked</a> (pending, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00473"></a>00473         }
<a name="l00474"></a>00474     }
<a name="l00475"></a>00475   
<a name="l00476"></a>00476   
<a name="l00477"></a>00477 
<a name="l00478"></a>00478   connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> += 1;
<a name="l00479"></a>00479 
<a name="l00480"></a>00480   _dbus_connection_wakeup_mainloop (connection);
<a name="l00481"></a>00481   
<a name="l00482"></a>00482   _dbus_verbose (<span class="stringliteral">"Message %p (%d %s %s %s '%s' reply to %u) added to incoming queue %p, %d incoming\n"</span>,
<a name="l00483"></a>00483                  message,
<a name="l00484"></a>00484                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message),
<a name="l00485"></a>00485                  <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message) ?
<a name="l00486"></a>00486                  <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message) :
<a name="l00487"></a>00487                  <span class="stringliteral">"no path"</span>,
<a name="l00488"></a>00488                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) ?
<a name="l00489"></a>00489                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) :
<a name="l00490"></a>00490                  <span class="stringliteral">"no interface"</span>,
<a name="l00491"></a>00491                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) ?
<a name="l00492"></a>00492                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) :
<a name="l00493"></a>00493                  <span class="stringliteral">"no member"</span>,
<a name="l00494"></a>00494                  <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message),
<a name="l00495"></a>00495                  <a class="code" href="group__DBusMessage.html#g1d7466805d255a82109d4f71b1008ff2">dbus_message_get_reply_serial</a> (message),
<a name="l00496"></a>00496                  connection,
<a name="l00497"></a>00497                  connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>);}
<a name="l00498"></a>00498 
<a name="l00507"></a>00507 <span class="keywordtype">void</span>
<a name="l00508"></a><a class="code" href="group__DBusConnectionInternals.html#gdb7a525dc6b566b575ee4f9b20028b04">00508</a> <a class="code" href="group__DBusConnectionInternals.html#gdb7a525dc6b566b575ee4f9b20028b04">_dbus_connection_queue_synthesized_message_link</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00509"></a>00509                                                  <a class="code" href="structDBusList.html">DBusList</a> *link)
<a name="l00510"></a>00510 {
<a name="l00511"></a>00511   HAVE_LOCK_CHECK (connection);
<a name="l00512"></a>00512   
<a name="l00513"></a>00513   <a class="code" href="group__DBusList.html#g20e549175e2b8f450f907592dc39d953">_dbus_list_append_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>, link);
<a name="l00514"></a>00514 
<a name="l00515"></a>00515   connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> += 1;
<a name="l00516"></a>00516 
<a name="l00517"></a>00517   _dbus_connection_wakeup_mainloop (connection);
<a name="l00518"></a>00518   
<a name="l00519"></a>00519   _dbus_verbose (<span class="stringliteral">"Synthesized message %p added to incoming queue %p, %d incoming\n"</span>,
<a name="l00520"></a>00520                  link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>, connection, connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>);
<a name="l00521"></a>00521 }
<a name="l00522"></a>00522 
<a name="l00523"></a>00523 
<a name="l00531"></a>00531 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00532"></a><a class="code" href="group__DBusConnectionInternals.html#g3d31a01751860b67f960dcaffb7bb4ef">00532</a> <a class="code" href="group__DBusConnectionInternals.html#g3d31a01751860b67f960dcaffb7bb4ef">_dbus_connection_has_messages_to_send_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l00533"></a>00533 {
<a name="l00534"></a>00534   HAVE_LOCK_CHECK (connection);
<a name="l00535"></a>00535   <span class="keywordflow">return</span> connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00536"></a>00536 }
<a name="l00537"></a>00537 
<a name="l00547"></a>00547 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00548"></a><a class="code" href="group__DBusConnection.html#g2210bb5734c1a04d0d654b026f27d94e">00548</a> <a class="code" href="group__DBusConnectionInternals.html#g2210bb5734c1a04d0d654b026f27d94e">dbus_connection_has_messages_to_send</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l00549"></a>00549 {
<a name="l00550"></a>00550   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> v;
<a name="l00551"></a>00551   
<a name="l00552"></a>00552   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00553"></a>00553 
<a name="l00554"></a>00554   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l00555"></a>00555   v = <a class="code" href="group__DBusConnectionInternals.html#g3d31a01751860b67f960dcaffb7bb4ef">_dbus_connection_has_messages_to_send_unlocked</a> (connection);
<a name="l00556"></a>00556   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l00557"></a>00557 
<a name="l00558"></a>00558   <span class="keywordflow">return</span> v;
<a name="l00559"></a>00559 }
<a name="l00560"></a>00560 
<a name="l00568"></a>00568 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l00569"></a><a class="code" href="group__DBusConnectionInternals.html#g3955cd53ac4f671a5bb54019887389a7">00569</a> <a class="code" href="group__DBusConnectionInternals.html#g3955cd53ac4f671a5bb54019887389a7">_dbus_connection_get_message_to_send</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l00570"></a>00570 {
<a name="l00571"></a>00571   HAVE_LOCK_CHECK (connection);
<a name="l00572"></a>00572   
<a name="l00573"></a>00573   <span class="keywordflow">return</span> <a class="code" href="group__DBusList.html#g18afc36fff1636a71295bcc7a75dc4f6">_dbus_list_get_last</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>);
<a name="l00574"></a>00574 }
<a name="l00575"></a>00575 
<a name="l00584"></a>00584 <span class="keywordtype">void</span>
<a name="l00585"></a><a class="code" href="group__DBusConnectionInternals.html#g2d04df24d0f54a4e2dcfbede4ef50f09">00585</a> <a class="code" href="group__DBusConnectionInternals.html#g2d04df24d0f54a4e2dcfbede4ef50f09">_dbus_connection_message_sent</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00586"></a>00586                                <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message)
<a name="l00587"></a>00587 {
<a name="l00588"></a>00588   <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l00589"></a>00589 
<a name="l00590"></a>00590   HAVE_LOCK_CHECK (connection);
<a name="l00591"></a>00591   
<a name="l00592"></a>00592   <span class="comment">/* This can be called before we even complete authentication, since</span>
<a name="l00593"></a>00593 <span class="comment">   * it's called on disconnect to clean up the outgoing queue.</span>
<a name="l00594"></a>00594 <span class="comment">   * It's also called as we successfully send each message.</span>
<a name="l00595"></a>00595 <span class="comment">   */</span>
<a name="l00596"></a>00596   
<a name="l00597"></a>00597   link = <a class="code" href="group__DBusList.html#g42736fb02458bfffed948a509962c059">_dbus_list_get_last_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>);
<a name="l00598"></a>00598   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00599"></a>00599   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a> == message);
<a name="l00600"></a>00600 
<a name="l00601"></a>00601   <span class="comment">/* Save this link in the link cache */</span>
<a name="l00602"></a>00602   <a class="code" href="group__DBusList.html#g57f1fc73dc1a4f8a7bf9860e000b1703">_dbus_list_unlink</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>,
<a name="l00603"></a>00603                      link);
<a name="l00604"></a>00604   <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>, link);
<a name="l00605"></a>00605   
<a name="l00606"></a>00606   connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> -= 1;
<a name="l00607"></a>00607 
<a name="l00608"></a>00608   _dbus_verbose (<span class="stringliteral">"Message %p (%d %s %s %s '%s') removed from outgoing queue %p, %d left to send\n"</span>,
<a name="l00609"></a>00609                  message,
<a name="l00610"></a>00610                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message),
<a name="l00611"></a>00611                  <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message) ?
<a name="l00612"></a>00612                  <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message) :
<a name="l00613"></a>00613                  <span class="stringliteral">"no path"</span>,
<a name="l00614"></a>00614                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) ?
<a name="l00615"></a>00615                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) :
<a name="l00616"></a>00616                  <span class="stringliteral">"no interface"</span>,
<a name="l00617"></a>00617                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) ?
<a name="l00618"></a>00618                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) :
<a name="l00619"></a>00619                  <span class="stringliteral">"no member"</span>,
<a name="l00620"></a>00620                  <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message),
<a name="l00621"></a>00621                  connection, connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a>);
<a name="l00622"></a>00622 
<a name="l00623"></a>00623   <span class="comment">/* Save this link in the link cache also */</span>
<a name="l00624"></a>00624   <a class="code" href="group__DBusMessageInternals.html#g5a991994492dfb85c5838b8293ccf0aa">_dbus_message_remove_size_counter</a> (message, connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>,
<a name="l00625"></a>00625                                      &amp;link);
<a name="l00626"></a>00626   <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>, link);
<a name="l00627"></a>00627   
<a name="l00628"></a>00628   <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l00629"></a>00629 }
<a name="l00630"></a>00630 
<a name="l00632"></a><a class="code" href="group__DBusConnectionInternals.html#gc0512dbb099a3cb80f503a647328c369">00632</a> <span class="keyword">typedef</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> (* <a class="code" href="group__DBusConnectionInternals.html#gc0512dbb099a3cb80f503a647328c369">DBusWatchAddFunction</a>)     (<a class="code" href="structDBusWatchList.html">DBusWatchList</a> *list,
<a name="l00633"></a>00633                                                   <a class="code" href="structDBusWatch.html">DBusWatch</a>     *watch);
<a name="l00635"></a><a class="code" href="group__DBusConnectionInternals.html#g219d92aa1ad72a99b4b6f610fb9a0cc6">00635</a> <span class="keyword">typedef</span> void        (* <a class="code" href="group__DBusConnectionInternals.html#g219d92aa1ad72a99b4b6f610fb9a0cc6">DBusWatchRemoveFunction</a>)  (<a class="code" href="structDBusWatchList.html">DBusWatchList</a> *list,
<a name="l00636"></a>00636                                                   <a class="code" href="structDBusWatch.html">DBusWatch</a>     *watch);
<a name="l00638"></a><a class="code" href="group__DBusConnectionInternals.html#ga7518254a3f5a36ee6dc00e4c21e7bff">00638</a> <span class="keyword">typedef</span> void        (* <a class="code" href="group__DBusConnectionInternals.html#ga7518254a3f5a36ee6dc00e4c21e7bff">DBusWatchToggleFunction</a>)  (<a class="code" href="structDBusWatchList.html">DBusWatchList</a> *list,
<a name="l00639"></a>00639                                                   <a class="code" href="structDBusWatch.html">DBusWatch</a>     *watch,
<a name="l00640"></a>00640                                                   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>    enabled);
<a name="l00641"></a>00641 
<a name="l00642"></a>00642 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00643"></a>00643 protected_change_watch (<a class="code" href="structDBusConnection.html">DBusConnection</a>         *connection,
<a name="l00644"></a>00644                         <a class="code" href="structDBusWatch.html">DBusWatch</a>              *watch,
<a name="l00645"></a>00645                         <a class="code" href="group__DBusConnectionInternals.html#gc0512dbb099a3cb80f503a647328c369">DBusWatchAddFunction</a>    add_function,
<a name="l00646"></a>00646                         <a class="code" href="group__DBusConnectionInternals.html#g219d92aa1ad72a99b4b6f610fb9a0cc6">DBusWatchRemoveFunction</a> remove_function,
<a name="l00647"></a>00647                         <a class="code" href="group__DBusConnectionInternals.html#ga7518254a3f5a36ee6dc00e4c21e7bff">DBusWatchToggleFunction</a> toggle_function,
<a name="l00648"></a>00648                         <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>             enabled)
<a name="l00649"></a>00649 {
<a name="l00650"></a>00650   <a class="code" href="structDBusWatchList.html">DBusWatchList</a> *watches;
<a name="l00651"></a>00651   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l00652"></a>00652   
<a name="l00653"></a>00653   HAVE_LOCK_CHECK (connection);
<a name="l00654"></a>00654 
<a name="l00655"></a>00655   <span class="comment">/* This isn't really safe or reasonable; a better pattern is the "do everything, then</span>
<a name="l00656"></a>00656 <span class="comment">   * drop lock and call out" one; but it has to be propagated up through all callers</span>
<a name="l00657"></a>00657 <span class="comment">   */</span>
<a name="l00658"></a>00658   
<a name="l00659"></a>00659   watches = connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a>;
<a name="l00660"></a>00660   <span class="keywordflow">if</span> (watches)
<a name="l00661"></a>00661     {
<a name="l00662"></a>00662       connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00663"></a>00663       <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l00664"></a>00664       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l00665"></a>00665 
<a name="l00666"></a>00666       <span class="keywordflow">if</span> (add_function)
<a name="l00667"></a>00667         retval = (* add_function) (watches, watch);
<a name="l00668"></a>00668       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (remove_function)
<a name="l00669"></a>00669         {
<a name="l00670"></a>00670           retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00671"></a>00671           (* remove_function) (watches, watch);
<a name="l00672"></a>00672         }
<a name="l00673"></a>00673       <span class="keywordflow">else</span>
<a name="l00674"></a>00674         {
<a name="l00675"></a>00675           retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00676"></a>00676           (* toggle_function) (watches, watch, enabled);
<a name="l00677"></a>00677         }
<a name="l00678"></a>00678       
<a name="l00679"></a>00679       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l00680"></a>00680       connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = watches;
<a name="l00681"></a>00681       <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (connection);
<a name="l00682"></a>00682 
<a name="l00683"></a>00683       <span class="keywordflow">return</span> retval;
<a name="l00684"></a>00684     }
<a name="l00685"></a>00685   <span class="keywordflow">else</span>
<a name="l00686"></a>00686     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00687"></a>00687 }
<a name="l00688"></a>00688      
<a name="l00689"></a>00689 
<a name="l00701"></a>00701 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00702"></a><a class="code" href="group__DBusConnectionInternals.html#g82adef36b4cd583bc1146eae5756c063">00702</a> <a class="code" href="group__DBusConnectionInternals.html#g82adef36b4cd583bc1146eae5756c063">_dbus_connection_add_watch_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00703"></a>00703                                      <a class="code" href="structDBusWatch.html">DBusWatch</a>      *watch)
<a name="l00704"></a>00704 {
<a name="l00705"></a>00705   <span class="keywordflow">return</span> protected_change_watch (connection, watch,
<a name="l00706"></a>00706                                  <a class="code" href="group__DBusWatchInternals.html#gec61655a4bd6186a6a1ec104771d8af5">_dbus_watch_list_add_watch</a>,
<a name="l00707"></a>00707                                  <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00708"></a>00708 }
<a name="l00709"></a>00709 
<a name="l00719"></a>00719 <span class="keywordtype">void</span>
<a name="l00720"></a><a class="code" href="group__DBusConnectionInternals.html#g65fc02c0756d0c7caaa39cd60922c99b">00720</a> <a class="code" href="group__DBusConnectionInternals.html#g65fc02c0756d0c7caaa39cd60922c99b">_dbus_connection_remove_watch_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00721"></a>00721                                         <a class="code" href="structDBusWatch.html">DBusWatch</a>      *watch)
<a name="l00722"></a>00722 {
<a name="l00723"></a>00723   protected_change_watch (connection, watch,
<a name="l00724"></a>00724                           <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00725"></a>00725                           <a class="code" href="group__DBusWatchInternals.html#g76894d297bc7d7d23cbacdc2b1778884">_dbus_watch_list_remove_watch</a>,
<a name="l00726"></a>00726                           <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00727"></a>00727 }
<a name="l00728"></a>00728 
<a name="l00739"></a>00739 <span class="keywordtype">void</span>
<a name="l00740"></a><a class="code" href="group__DBusConnectionInternals.html#g6c00e2eaf225b154760976af5688d250">00740</a> <a class="code" href="group__DBusConnectionInternals.html#g6c00e2eaf225b154760976af5688d250">_dbus_connection_toggle_watch_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00741"></a>00741                                         <a class="code" href="structDBusWatch.html">DBusWatch</a>      *watch,
<a name="l00742"></a>00742                                         <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>     enabled)
<a name="l00743"></a>00743 {
<a name="l00744"></a>00744   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (watch != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00745"></a>00745 
<a name="l00746"></a>00746   protected_change_watch (connection, watch,
<a name="l00747"></a>00747                           <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00748"></a>00748                           <a class="code" href="group__DBusWatchInternals.html#g14bb50e8663a1d9d3960b4f73c09c097">_dbus_watch_list_toggle_watch</a>,
<a name="l00749"></a>00749                           enabled);
<a name="l00750"></a>00750 }
<a name="l00751"></a>00751 
<a name="l00753"></a><a class="code" href="group__DBusConnectionInternals.html#gdfaf37b40bf7fb9025bcf99400306062">00753</a> <span class="keyword">typedef</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> (* <a class="code" href="group__DBusConnectionInternals.html#gdfaf37b40bf7fb9025bcf99400306062">DBusTimeoutAddFunction</a>)    (<a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *list,
<a name="l00754"></a>00754                                                    <a class="code" href="structDBusTimeout.html">DBusTimeout</a>     *timeout);
<a name="l00756"></a><a class="code" href="group__DBusConnectionInternals.html#gd5321323beee432e7d742a13f511eb9f">00756</a> <span class="keyword">typedef</span> void        (* <a class="code" href="group__DBusConnectionInternals.html#gd5321323beee432e7d742a13f511eb9f">DBusTimeoutRemoveFunction</a>) (<a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *list,
<a name="l00757"></a>00757                                                    <a class="code" href="structDBusTimeout.html">DBusTimeout</a>     *timeout);
<a name="l00759"></a><a class="code" href="group__DBusConnectionInternals.html#g110617d1769f3ca556737cbeae2f0427">00759</a> <span class="keyword">typedef</span> void        (* <a class="code" href="group__DBusConnectionInternals.html#g110617d1769f3ca556737cbeae2f0427">DBusTimeoutToggleFunction</a>) (<a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *list,
<a name="l00760"></a>00760                                                    <a class="code" href="structDBusTimeout.html">DBusTimeout</a>     *timeout,
<a name="l00761"></a>00761                                                    <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>      enabled);
<a name="l00762"></a>00762 
<a name="l00763"></a>00763 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00764"></a>00764 protected_change_timeout (<a class="code" href="structDBusConnection.html">DBusConnection</a>           *connection,
<a name="l00765"></a>00765                           <a class="code" href="structDBusTimeout.html">DBusTimeout</a>              *timeout,
<a name="l00766"></a>00766                           <a class="code" href="group__DBusConnectionInternals.html#gdfaf37b40bf7fb9025bcf99400306062">DBusTimeoutAddFunction</a>    add_function,
<a name="l00767"></a>00767                           <a class="code" href="group__DBusConnectionInternals.html#gd5321323beee432e7d742a13f511eb9f">DBusTimeoutRemoveFunction</a> remove_function,
<a name="l00768"></a>00768                           <a class="code" href="group__DBusConnectionInternals.html#g110617d1769f3ca556737cbeae2f0427">DBusTimeoutToggleFunction</a> toggle_function,
<a name="l00769"></a>00769                           <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>               enabled)
<a name="l00770"></a>00770 {
<a name="l00771"></a>00771   <a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *timeouts;
<a name="l00772"></a>00772   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l00773"></a>00773   
<a name="l00774"></a>00774   HAVE_LOCK_CHECK (connection);
<a name="l00775"></a>00775 
<a name="l00776"></a>00776   <span class="comment">/* This isn't really safe or reasonable; a better pattern is the "do everything, then</span>
<a name="l00777"></a>00777 <span class="comment">   * drop lock and call out" one; but it has to be propagated up through all callers</span>
<a name="l00778"></a>00778 <span class="comment">   */</span>
<a name="l00779"></a>00779   
<a name="l00780"></a>00780   timeouts = connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a>;
<a name="l00781"></a>00781   <span class="keywordflow">if</span> (timeouts)
<a name="l00782"></a>00782     {
<a name="l00783"></a>00783       connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00784"></a>00784       <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l00785"></a>00785       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l00786"></a>00786 
<a name="l00787"></a>00787       <span class="keywordflow">if</span> (add_function)
<a name="l00788"></a>00788         retval = (* add_function) (timeouts, timeout);
<a name="l00789"></a>00789       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (remove_function)
<a name="l00790"></a>00790         {
<a name="l00791"></a>00791           retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00792"></a>00792           (* remove_function) (timeouts, timeout);
<a name="l00793"></a>00793         }
<a name="l00794"></a>00794       <span class="keywordflow">else</span>
<a name="l00795"></a>00795         {
<a name="l00796"></a>00796           retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00797"></a>00797           (* toggle_function) (timeouts, timeout, enabled);
<a name="l00798"></a>00798         }
<a name="l00799"></a>00799       
<a name="l00800"></a>00800       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l00801"></a>00801       connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = timeouts;
<a name="l00802"></a>00802       <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (connection);
<a name="l00803"></a>00803 
<a name="l00804"></a>00804       <span class="keywordflow">return</span> retval;
<a name="l00805"></a>00805     }
<a name="l00806"></a>00806   <span class="keywordflow">else</span>
<a name="l00807"></a>00807     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00808"></a>00808 }
<a name="l00809"></a>00809 
<a name="l00822"></a>00822 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00823"></a><a class="code" href="group__DBusConnectionInternals.html#g69e87e3be94b8c681585ec870e39a64a">00823</a> <a class="code" href="group__DBusConnectionInternals.html#g69e87e3be94b8c681585ec870e39a64a">_dbus_connection_add_timeout_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00824"></a>00824                                        <a class="code" href="structDBusTimeout.html">DBusTimeout</a>    *timeout)
<a name="l00825"></a>00825 {
<a name="l00826"></a>00826   <span class="keywordflow">return</span> protected_change_timeout (connection, timeout,
<a name="l00827"></a>00827                                    <a class="code" href="group__DBusTimeoutInternals.html#g14955f061551ece122808b9e6ddc0757">_dbus_timeout_list_add_timeout</a>,
<a name="l00828"></a>00828                                    <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00829"></a>00829 }
<a name="l00830"></a>00830 
<a name="l00840"></a>00840 <span class="keywordtype">void</span>
<a name="l00841"></a><a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">00841</a> <a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">_dbus_connection_remove_timeout_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00842"></a>00842                                           <a class="code" href="structDBusTimeout.html">DBusTimeout</a>    *timeout)
<a name="l00843"></a>00843 {
<a name="l00844"></a>00844   protected_change_timeout (connection, timeout,
<a name="l00845"></a>00845                             <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00846"></a>00846                             <a class="code" href="group__DBusTimeoutInternals.html#gec0ffafdcac87f23878a2ddded044822">_dbus_timeout_list_remove_timeout</a>,
<a name="l00847"></a>00847                             <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00848"></a>00848 }
<a name="l00849"></a>00849 
<a name="l00860"></a>00860 <span class="keywordtype">void</span>
<a name="l00861"></a><a class="code" href="group__DBusConnectionInternals.html#g165dcfd8b995ff0edd19aebcf3e1a61a">00861</a> <a class="code" href="group__DBusConnectionInternals.html#g165dcfd8b995ff0edd19aebcf3e1a61a">_dbus_connection_toggle_timeout_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>   *connection,
<a name="l00862"></a>00862                                           <a class="code" href="structDBusTimeout.html">DBusTimeout</a>      *timeout,
<a name="l00863"></a>00863                                           <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>       enabled)
<a name="l00864"></a>00864 {
<a name="l00865"></a>00865   protected_change_timeout (connection, timeout,
<a name="l00866"></a>00866                             <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l00867"></a>00867                             <a class="code" href="group__DBusTimeoutInternals.html#g3d1ee0968a47651c5428ebf48711b217">_dbus_timeout_list_toggle_timeout</a>,
<a name="l00868"></a>00868                             enabled);
<a name="l00869"></a>00869 }
<a name="l00870"></a>00870 
<a name="l00871"></a>00871 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00872"></a>00872 _dbus_connection_attach_pending_call_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l00873"></a>00873                                                <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending)
<a name="l00874"></a>00874 {
<a name="l00875"></a>00875   <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> reply_serial;
<a name="l00876"></a>00876   <a class="code" href="structDBusTimeout.html">DBusTimeout</a> *timeout;
<a name="l00877"></a>00877 
<a name="l00878"></a>00878   HAVE_LOCK_CHECK (connection);
<a name="l00879"></a>00879 
<a name="l00880"></a>00880   reply_serial = <a class="code" href="group__DBusPendingCallInternals.html#gf5f3df36149bfe55d824eb08d00768fc">_dbus_pending_call_get_reply_serial_unlocked</a> (pending);
<a name="l00881"></a>00881 
<a name="l00882"></a>00882   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reply_serial != 0);
<a name="l00883"></a>00883 
<a name="l00884"></a>00884   timeout = <a class="code" href="group__DBusPendingCallInternals.html#ga9acac047b61c9a0eaff1977151e9e08">_dbus_pending_call_get_timeout_unlocked</a> (pending);
<a name="l00885"></a>00885 
<a name="l00886"></a>00886   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusConnectionInternals.html#g69e87e3be94b8c681585ec870e39a64a">_dbus_connection_add_timeout_unlocked</a> (connection, timeout))
<a name="l00887"></a>00887     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00888"></a>00888   
<a name="l00889"></a>00889   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusHashTable.html#gca20a83f3214db08fa34df2c49c8edd5">_dbus_hash_table_insert_int</a> (connection-&gt;pending_replies,
<a name="l00890"></a>00890                                     reply_serial,
<a name="l00891"></a>00891                                     pending))
<a name="l00892"></a>00892     {
<a name="l00893"></a>00893       <a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">_dbus_connection_remove_timeout_unlocked</a> (connection, timeout);
<a name="l00894"></a>00894 
<a name="l00895"></a>00895       <a class="code" href="group__DBusPendingCallInternals.html#gfea13f8b9977d341e41201c407adea2a">_dbus_pending_call_set_timeout_added_unlocked</a> (pending, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00896"></a>00896       HAVE_LOCK_CHECK (connection);
<a name="l00897"></a>00897       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00898"></a>00898     }
<a name="l00899"></a>00899   
<a name="l00900"></a>00900   <a class="code" href="group__DBusPendingCallInternals.html#gfea13f8b9977d341e41201c407adea2a">_dbus_pending_call_set_timeout_added_unlocked</a> (pending, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l00901"></a>00901 
<a name="l00902"></a>00902   <a class="code" href="group__DBusPendingCallInternals.html#g9d8987da3747604d370ffec2c5e1e10a">_dbus_pending_call_ref_unlocked</a> (pending);
<a name="l00903"></a>00903 
<a name="l00904"></a>00904   HAVE_LOCK_CHECK (connection);
<a name="l00905"></a>00905   
<a name="l00906"></a>00906   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00907"></a>00907 }
<a name="l00908"></a>00908 
<a name="l00909"></a>00909 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00910"></a>00910 free_pending_call_on_hash_removal (<span class="keywordtype">void</span> *data)
<a name="l00911"></a>00911 {
<a name="l00912"></a>00912   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending;
<a name="l00913"></a>00913   <a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection;
<a name="l00914"></a>00914   
<a name="l00915"></a>00915   <span class="keywordflow">if</span> (data == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00916"></a>00916     <span class="keywordflow">return</span>;
<a name="l00917"></a>00917 
<a name="l00918"></a>00918   pending = data;
<a name="l00919"></a>00919 
<a name="l00920"></a>00920   connection = <a class="code" href="group__DBusPendingCallInternals.html#ge725060aa80d9df58dcee4f1fa108784">_dbus_pending_call_get_connection_unlocked</a> (pending);
<a name="l00921"></a>00921 
<a name="l00922"></a>00922   HAVE_LOCK_CHECK (connection);
<a name="l00923"></a>00923   
<a name="l00924"></a>00924   <span class="keywordflow">if</span> (<a class="code" href="group__DBusPendingCallInternals.html#gf1e630b966722af540502329ed028254">_dbus_pending_call_is_timeout_added_unlocked</a> (pending))
<a name="l00925"></a>00925     {
<a name="l00926"></a>00926       <a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">_dbus_connection_remove_timeout_unlocked</a> (connection,
<a name="l00927"></a>00927                                                 <a class="code" href="group__DBusPendingCallInternals.html#ga9acac047b61c9a0eaff1977151e9e08">_dbus_pending_call_get_timeout_unlocked</a> (pending));
<a name="l00928"></a>00928       
<a name="l00929"></a>00929       <a class="code" href="group__DBusPendingCallInternals.html#gfea13f8b9977d341e41201c407adea2a">_dbus_pending_call_set_timeout_added_unlocked</a> (pending, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00930"></a>00930     }
<a name="l00931"></a>00931 
<a name="l00932"></a>00932   <span class="comment">/* FIXME 1.0? this is sort of dangerous and undesirable to drop the lock </span>
<a name="l00933"></a>00933 <span class="comment">   * here, but the pending call finalizer could in principle call out to </span>
<a name="l00934"></a>00934 <span class="comment">   * application code so we pretty much have to... some larger code reorg </span>
<a name="l00935"></a>00935 <span class="comment">   * might be needed.</span>
<a name="l00936"></a>00936 <span class="comment">   */</span>
<a name="l00937"></a>00937   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l00938"></a>00938   <a class="code" href="group__DBusPendingCallInternals.html#g26f09beed0dd6323cca0452abf344567">_dbus_pending_call_unref_and_unlock</a> (pending);
<a name="l00939"></a>00939   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l00940"></a>00940   <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (connection);
<a name="l00941"></a>00941 }
<a name="l00942"></a>00942 
<a name="l00943"></a>00943 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00944"></a>00944 _dbus_connection_detach_pending_call_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l00945"></a>00945                                                <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending)
<a name="l00946"></a>00946 {
<a name="l00947"></a>00947   <span class="comment">/* This ends up unlocking to call the pending call finalizer, which is unexpected to</span>
<a name="l00948"></a>00948 <span class="comment">   * say the least.</span>
<a name="l00949"></a>00949 <span class="comment">   */</span>
<a name="l00950"></a>00950   <a class="code" href="group__DBusHashTable.html#gcdebe75bd692605a69dc73c15e0eefd0">_dbus_hash_table_remove_int</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>,
<a name="l00951"></a>00951                                <a class="code" href="group__DBusPendingCallInternals.html#gf5f3df36149bfe55d824eb08d00768fc">_dbus_pending_call_get_reply_serial_unlocked</a> (pending));
<a name="l00952"></a>00952 }
<a name="l00953"></a>00953 
<a name="l00954"></a>00954 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00955"></a>00955 _dbus_connection_detach_pending_call_and_unlock (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l00956"></a>00956                                                  <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending)
<a name="l00957"></a>00957 {
<a name="l00958"></a>00958   <span class="comment">/* The idea here is to avoid finalizing the pending call</span>
<a name="l00959"></a>00959 <span class="comment">   * with the lock held, since there's a destroy notifier</span>
<a name="l00960"></a>00960 <span class="comment">   * in pending call that goes out to application code.</span>
<a name="l00961"></a>00961 <span class="comment">   *</span>
<a name="l00962"></a>00962 <span class="comment">   * There's an extra unlock inside the hash table</span>
<a name="l00963"></a>00963 <span class="comment">   * "free pending call" function FIXME...</span>
<a name="l00964"></a>00964 <span class="comment">   */</span>
<a name="l00965"></a>00965   <a class="code" href="group__DBusPendingCallInternals.html#g9d8987da3747604d370ffec2c5e1e10a">_dbus_pending_call_ref_unlocked</a> (pending);
<a name="l00966"></a>00966   <a class="code" href="group__DBusHashTable.html#gcdebe75bd692605a69dc73c15e0eefd0">_dbus_hash_table_remove_int</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>,
<a name="l00967"></a>00967                                <a class="code" href="group__DBusPendingCallInternals.html#gf5f3df36149bfe55d824eb08d00768fc">_dbus_pending_call_get_reply_serial_unlocked</a> (pending));
<a name="l00968"></a>00968   <a class="code" href="group__DBusPendingCallInternals.html#g26f09beed0dd6323cca0452abf344567">_dbus_pending_call_unref_and_unlock</a> (pending);
<a name="l00969"></a>00969 }
<a name="l00970"></a>00970 
<a name="l00979"></a>00979 <span class="keywordtype">void</span>
<a name="l00980"></a><a class="code" href="group__DBusConnectionInternals.html#g968196bee49659e75c54b53d7c85fa51">00980</a> <a class="code" href="group__DBusConnectionInternals.html#g968196bee49659e75c54b53d7c85fa51">_dbus_connection_remove_pending_call</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l00981"></a>00981                                       <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending)
<a name="l00982"></a>00982 {
<a name="l00983"></a>00983   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l00984"></a>00984   _dbus_connection_detach_pending_call_and_unlock (connection, pending);
<a name="l00985"></a>00985 }
<a name="l00986"></a>00986 
<a name="l00996"></a>00996 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00997"></a>00997 _dbus_connection_acquire_io_path (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l00998"></a>00998                                   <span class="keywordtype">int</span>             timeout_milliseconds)
<a name="l00999"></a>00999 {
<a name="l01000"></a>01000   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> we_acquired;
<a name="l01001"></a>01001   
<a name="l01002"></a>01002   HAVE_LOCK_CHECK (connection);
<a name="l01003"></a>01003 
<a name="l01004"></a>01004   <span class="comment">/* We don't want the connection to vanish */</span>
<a name="l01005"></a>01005   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l01006"></a>01006 
<a name="l01007"></a>01007   <span class="comment">/* We will only touch io_path_acquired which is protected by our mutex */</span>
<a name="l01008"></a>01008   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l01009"></a>01009   
<a name="l01010"></a>01010   _dbus_verbose (<span class="stringliteral">"%s locking io_path_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01011"></a>01011   <a class="code" href="group__DBusThreadsInternals.html#ge6eafe138e9c317bfb25971d1d8bef2d">_dbus_mutex_lock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01012"></a>01012 
<a name="l01013"></a>01013   _dbus_verbose (<span class="stringliteral">"%s start connection-&gt;io_path_acquired = %d timeout = %d\n"</span>,
<a name="l01014"></a>01014                  _DBUS_FUNCTION_NAME, connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>, timeout_milliseconds);
<a name="l01015"></a>01015 
<a name="l01016"></a>01016   we_acquired = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01017"></a>01017   
<a name="l01018"></a>01018   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>)
<a name="l01019"></a>01019     {
<a name="l01020"></a>01020       <span class="keywordflow">if</span> (timeout_milliseconds != -1)
<a name="l01021"></a>01021         {
<a name="l01022"></a>01022           _dbus_verbose (<span class="stringliteral">"%s waiting %d for IO path to be acquirable\n"</span>,
<a name="l01023"></a>01023                          _DBUS_FUNCTION_NAME, timeout_milliseconds);
<a name="l01024"></a>01024 
<a name="l01025"></a>01025           <span class="keywordflow">if</span> (!<a class="code" href="group__DBusThreadsInternals.html#gac7b2117e5479ca6858734b59cfb9259">_dbus_condvar_wait_timeout</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>,
<a name="l01026"></a>01026                                            connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>,
<a name="l01027"></a>01027                                            timeout_milliseconds))
<a name="l01028"></a>01028             {
<a name="l01029"></a>01029               <span class="comment">/* We timed out before anyone signaled. */</span>
<a name="l01030"></a>01030               <span class="comment">/* (writing the loop to handle the !timedout case by</span>
<a name="l01031"></a>01031 <span class="comment">               * waiting longer if needed is a pain since dbus</span>
<a name="l01032"></a>01032 <span class="comment">               * wraps pthread_cond_timedwait to take a relative</span>
<a name="l01033"></a>01033 <span class="comment">               * time instead of absolute, something kind of stupid</span>
<a name="l01034"></a>01034 <span class="comment">               * on our part. for now it doesn't matter, we will just</span>
<a name="l01035"></a>01035 <span class="comment">               * end up back here eventually.)</span>
<a name="l01036"></a>01036 <span class="comment">               */</span>
<a name="l01037"></a>01037             }
<a name="l01038"></a>01038         }
<a name="l01039"></a>01039       <span class="keywordflow">else</span>
<a name="l01040"></a>01040         {
<a name="l01041"></a>01041           <span class="keywordflow">while</span> (connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>)
<a name="l01042"></a>01042             {
<a name="l01043"></a>01043               _dbus_verbose (<span class="stringliteral">"%s waiting for IO path to be acquirable\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01044"></a>01044               <a class="code" href="group__DBusThreadsInternals.html#g393c0cfdec998dc5abe49480ac21ea51">_dbus_condvar_wait</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>, 
<a name="l01045"></a>01045                                   connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01046"></a>01046             }
<a name="l01047"></a>01047         }
<a name="l01048"></a>01048     }
<a name="l01049"></a>01049   
<a name="l01050"></a>01050   <span class="keywordflow">if</span> (!connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>)
<a name="l01051"></a>01051     {
<a name="l01052"></a>01052       we_acquired = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01053"></a>01053       connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01054"></a>01054     }
<a name="l01055"></a>01055   
<a name="l01056"></a>01056   _dbus_verbose (<span class="stringliteral">"%s end connection-&gt;io_path_acquired = %d we_acquired = %d\n"</span>,
<a name="l01057"></a>01057                  _DBUS_FUNCTION_NAME, connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>, we_acquired);
<a name="l01058"></a>01058 
<a name="l01059"></a>01059   _dbus_verbose (<span class="stringliteral">"%s unlocking io_path_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01060"></a>01060   <a class="code" href="group__DBusThreadsInternals.html#g94dcc555488e5d677f10bd3898d61c00">_dbus_mutex_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01061"></a>01061 
<a name="l01062"></a>01062   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l01063"></a>01063   
<a name="l01064"></a>01064   HAVE_LOCK_CHECK (connection);
<a name="l01065"></a>01065 
<a name="l01066"></a>01066   <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (connection);
<a name="l01067"></a>01067   
<a name="l01068"></a>01068   <span class="keywordflow">return</span> we_acquired;
<a name="l01069"></a>01069 }
<a name="l01070"></a>01070 
<a name="l01078"></a>01078 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01079"></a>01079 _dbus_connection_release_io_path (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01080"></a>01080 {
<a name="l01081"></a>01081   HAVE_LOCK_CHECK (connection);
<a name="l01082"></a>01082   
<a name="l01083"></a>01083   _dbus_verbose (<span class="stringliteral">"%s locking io_path_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01084"></a>01084   <a class="code" href="group__DBusThreadsInternals.html#ge6eafe138e9c317bfb25971d1d8bef2d">_dbus_mutex_lock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01085"></a>01085   
<a name="l01086"></a>01086   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>);
<a name="l01087"></a>01087 
<a name="l01088"></a>01088   _dbus_verbose (<span class="stringliteral">"%s start connection-&gt;io_path_acquired = %d\n"</span>,
<a name="l01089"></a>01089                  _DBUS_FUNCTION_NAME, connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>);
<a name="l01090"></a>01090   
<a name="l01091"></a>01091   connection-&gt;<a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01092"></a>01092   <a class="code" href="group__DBusThreadsInternals.html#g8af2fd84773022e7e7ce1f21f0126203">_dbus_condvar_wake_one</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>);
<a name="l01093"></a>01093 
<a name="l01094"></a>01094   _dbus_verbose (<span class="stringliteral">"%s unlocking io_path_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01095"></a>01095   <a class="code" href="group__DBusThreadsInternals.html#g94dcc555488e5d677f10bd3898d61c00">_dbus_mutex_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01096"></a>01096 }
<a name="l01097"></a>01097 
<a name="l01126"></a>01126 <span class="keywordtype">void</span>
<a name="l01127"></a><a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">01127</a> <a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">_dbus_connection_do_iteration_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l01128"></a>01128                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    flags,
<a name="l01129"></a>01129                                         <span class="keywordtype">int</span>             timeout_milliseconds)
<a name="l01130"></a>01130 {
<a name="l01131"></a>01131   _dbus_verbose (<span class="stringliteral">"%s start\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01132"></a>01132   
<a name="l01133"></a>01133   HAVE_LOCK_CHECK (connection);
<a name="l01134"></a>01134   
<a name="l01135"></a>01135   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> == 0)
<a name="l01136"></a>01136     flags &amp;= ~DBUS_ITERATION_DO_WRITING;
<a name="l01137"></a>01137 
<a name="l01138"></a>01138   <span class="keywordflow">if</span> (_dbus_connection_acquire_io_path (connection,
<a name="l01139"></a>01139                                         (flags &amp; DBUS_ITERATION_BLOCK) ? timeout_milliseconds : 0))
<a name="l01140"></a>01140     {
<a name="l01141"></a>01141       HAVE_LOCK_CHECK (connection);
<a name="l01142"></a>01142       
<a name="l01143"></a>01143       <a class="code" href="group__DBusTransport.html#gc5e6d7a01debcf852b8d5a2fbc666fde">_dbus_transport_do_iteration</a> (connection-&gt;transport,
<a name="l01144"></a>01144                                     flags, timeout_milliseconds);
<a name="l01145"></a>01145       _dbus_connection_release_io_path (connection);
<a name="l01146"></a>01146     }
<a name="l01147"></a>01147 
<a name="l01148"></a>01148   HAVE_LOCK_CHECK (connection);
<a name="l01149"></a>01149 
<a name="l01150"></a>01150   _dbus_verbose (<span class="stringliteral">"%s end\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01151"></a>01151 }
<a name="l01152"></a>01152 
<a name="l01162"></a>01162 <a class="code" href="structDBusConnection.html">DBusConnection</a>*
<a name="l01163"></a><a class="code" href="group__DBusConnectionInternals.html#g2cdffe9215251b69cb39ff36b9f50e6c">01163</a> <a class="code" href="group__DBusConnectionInternals.html#g2cdffe9215251b69cb39ff36b9f50e6c">_dbus_connection_new_for_transport</a> (<a class="code" href="structDBusTransport.html">DBusTransport</a> *transport)
<a name="l01164"></a>01164 {
<a name="l01165"></a>01165   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l01166"></a>01166   <a class="code" href="structDBusWatchList.html">DBusWatchList</a> *watch_list;
<a name="l01167"></a>01167   <a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *timeout_list;
<a name="l01168"></a>01168   <a class="code" href="structDBusHashTable.html">DBusHashTable</a> *pending_replies;
<a name="l01169"></a>01169   <a class="code" href="structDBusList.html">DBusList</a> *disconnect_link;
<a name="l01170"></a>01170   <a class="code" href="structDBusMessage.html">DBusMessage</a> *disconnect_message;
<a name="l01171"></a>01171   <a class="code" href="structDBusCounter.html">DBusCounter</a> *outgoing_counter;
<a name="l01172"></a>01172   <a class="code" href="structDBusObjectTree.html">DBusObjectTree</a> *objects;
<a name="l01173"></a>01173   
<a name="l01174"></a>01174   watch_list = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01175"></a>01175   connection = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01176"></a>01176   pending_replies = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01177"></a>01177   timeout_list = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01178"></a>01178   disconnect_link = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01179"></a>01179   disconnect_message = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01180"></a>01180   outgoing_counter = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01181"></a>01181   objects = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01182"></a>01182   
<a name="l01183"></a>01183   watch_list = <a class="code" href="group__DBusWatchInternals.html#g5d9db5d0af5916a5ec890eb38d5741eb">_dbus_watch_list_new</a> ();
<a name="l01184"></a>01184   <span class="keywordflow">if</span> (watch_list == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01185"></a>01185     <span class="keywordflow">goto</span> error;
<a name="l01186"></a>01186 
<a name="l01187"></a>01187   timeout_list = <a class="code" href="group__DBusTimeoutInternals.html#g5b122b35cdb3926b7dc2d084ddff9d62">_dbus_timeout_list_new</a> ();
<a name="l01188"></a>01188   <span class="keywordflow">if</span> (timeout_list == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01189"></a>01189     <span class="keywordflow">goto</span> error;  
<a name="l01190"></a>01190 
<a name="l01191"></a>01191   pending_replies =
<a name="l01192"></a>01192     <a class="code" href="group__DBusHashTable.html#gc8e434348a354b9606d4c50c127a5eb4">_dbus_hash_table_new</a> (<a class="code" href="group__DBusHashTable.html#ggb0ab9767ffa5b6720a13b3d74163085226446bd9fbb15c6c381b35a810207141">DBUS_HASH_INT</a>,
<a name="l01193"></a>01193                           <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l01194"></a>01194                           (<a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>)free_pending_call_on_hash_removal);
<a name="l01195"></a>01195   <span class="keywordflow">if</span> (pending_replies == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01196"></a>01196     <span class="keywordflow">goto</span> error;
<a name="l01197"></a>01197   
<a name="l01198"></a>01198   connection = <a class="code" href="group__DBusMemory.html#gba9d823abda7f4cadbaf5177d3b8b793">dbus_new0</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>, 1);
<a name="l01199"></a>01199   <span class="keywordflow">if</span> (connection == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01200"></a>01200     <span class="keywordflow">goto</span> error;
<a name="l01201"></a>01201 
<a name="l01202"></a>01202   <a class="code" href="group__DBusThreadsInternals.html#g5b22688470ddee6e7b9c9b6eb751fa2e">_dbus_mutex_new_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>);
<a name="l01203"></a>01203   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01204"></a>01204     <span class="keywordflow">goto</span> error;
<a name="l01205"></a>01205 
<a name="l01206"></a>01206   <a class="code" href="group__DBusThreadsInternals.html#g5b22688470ddee6e7b9c9b6eb751fa2e">_dbus_mutex_new_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01207"></a>01207   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01208"></a>01208     <span class="keywordflow">goto</span> error;
<a name="l01209"></a>01209 
<a name="l01210"></a>01210   <a class="code" href="group__DBusThreadsInternals.html#g5b22688470ddee6e7b9c9b6eb751fa2e">_dbus_mutex_new_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l01211"></a>01211   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01212"></a>01212     <span class="keywordflow">goto</span> error;
<a name="l01213"></a>01213   
<a name="l01214"></a>01214   <a class="code" href="group__DBusThreadsInternals.html#g859c5830e3c212323c1d6dafee3858a1">_dbus_condvar_new_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>);
<a name="l01215"></a>01215   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01216"></a>01216     <span class="keywordflow">goto</span> error;
<a name="l01217"></a>01217   
<a name="l01218"></a>01218   <a class="code" href="group__DBusThreadsInternals.html#g859c5830e3c212323c1d6dafee3858a1">_dbus_condvar_new_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>);
<a name="l01219"></a>01219   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01220"></a>01220     <span class="keywordflow">goto</span> error;
<a name="l01221"></a>01221 
<a name="l01222"></a>01222   disconnect_message = <a class="code" href="group__DBusMessage.html#g9b9306115efd0fd720fc9b912f108bca">dbus_message_new_signal</a> (<a class="code" href="group__DBusShared.html#g850990a54a46142ee7c5f8174cc932c1">DBUS_PATH_LOCAL</a>,
<a name="l01223"></a>01223                                                 <a class="code" href="group__DBusShared.html#g9ef6478aae637449ec0c5de1679f75ce">DBUS_INTERFACE_LOCAL</a>,
<a name="l01224"></a>01224                                                 <span class="stringliteral">"Disconnected"</span>);
<a name="l01225"></a>01225   
<a name="l01226"></a>01226   <span class="keywordflow">if</span> (disconnect_message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01227"></a>01227     <span class="keywordflow">goto</span> error;
<a name="l01228"></a>01228 
<a name="l01229"></a>01229   disconnect_link = <a class="code" href="group__DBusList.html#gc20b9981531cef590d49a59240344cd8">_dbus_list_alloc_link</a> (disconnect_message);
<a name="l01230"></a>01230   <span class="keywordflow">if</span> (disconnect_link == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01231"></a>01231     <span class="keywordflow">goto</span> error;
<a name="l01232"></a>01232 
<a name="l01233"></a>01233   outgoing_counter = <a class="code" href="group__DBusResources.html#g9911dd8fa020299a2b517251ea0be399">_dbus_counter_new</a> ();
<a name="l01234"></a>01234   <span class="keywordflow">if</span> (outgoing_counter == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01235"></a>01235     <span class="keywordflow">goto</span> error;
<a name="l01236"></a>01236 
<a name="l01237"></a>01237   objects = <a class="code" href="group__DBusObjectTree.html#g5920f14b487122f13a3d439952d5ed2e">_dbus_object_tree_new</a> (connection);
<a name="l01238"></a>01238   <span class="keywordflow">if</span> (objects == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01239"></a>01239     <span class="keywordflow">goto</span> error;
<a name="l01240"></a>01240   
<a name="l01241"></a>01241   <span class="keywordflow">if</span> (_dbus_modify_sigpipe)
<a name="l01242"></a>01242     <a class="code" href="group__DBusSysdeps.html#g6890d4cde3afec0bf274ca2af8c9e204">_dbus_disable_sigpipe</a> ();
<a name="l01243"></a>01243   
<a name="l01244"></a>01244   connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> = 1;
<a name="l01245"></a>01245   connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a> = transport;
<a name="l01246"></a>01246   connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = watch_list;
<a name="l01247"></a>01247   connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = timeout_list;
<a name="l01248"></a>01248   connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a> = pending_replies;
<a name="l01249"></a>01249   connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a> = outgoing_counter;
<a name="l01250"></a>01250   connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01251"></a>01251   connection-&gt;<a class="code" href="structDBusConnection.html#f3bbd2ecba171ebb8e952eaa030971d7">last_dispatch_status</a> = <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>; <span class="comment">/* so we're notified first time there's data */</span>
<a name="l01252"></a>01252   connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a> = objects;
<a name="l01253"></a>01253   connection-&gt;<a class="code" href="structDBusConnection.html#2a9f22339f90157f308a532462218404">exit_on_disconnect</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01254"></a>01254   connection-&gt;<a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01255"></a>01255   connection-&gt;<a class="code" href="structDBusConnection.html#b13bc36d7e6f91995768277ecbd5482c">route_peer_messages</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01256"></a>01256   connection-&gt;<a class="code" href="structDBusConnection.html#48d141d4311211e921571043bdbaeefb">disconnected_message_arrived</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01257"></a>01257   connection-&gt;<a class="code" href="structDBusConnection.html#3b2707b9d10d0643f91a8e027ae118b5">disconnected_message_processed</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01258"></a>01258   
<a name="l01259"></a>01259 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01260"></a>01260 <span class="preprocessor"></span>  connection-&gt;<a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a> = <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>;
<a name="l01261"></a>01261 <span class="preprocessor">#endif</span>
<a name="l01262"></a>01262 <span class="preprocessor"></span>  
<a name="l01263"></a>01263   <a class="code" href="group__DBusDataSlot.html#g6de49b3a1210202215d40a5a19806992">_dbus_data_slot_list_init</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">slot_list</a>);
<a name="l01264"></a>01264 
<a name="l01265"></a>01265   connection-&gt;<a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a> = 1;
<a name="l01266"></a>01266 
<a name="l01267"></a>01267   connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a> = disconnect_link;
<a name="l01268"></a>01268 
<a name="l01269"></a>01269   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l01270"></a>01270   
<a name="l01271"></a>01271   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusTransport.html#g9aaa3f8bf429c94d4ed180dff36c503c">_dbus_transport_set_connection</a> (transport, connection))
<a name="l01272"></a>01272     {
<a name="l01273"></a>01273       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l01274"></a>01274 
<a name="l01275"></a>01275       <span class="keywordflow">goto</span> error;
<a name="l01276"></a>01276     }
<a name="l01277"></a>01277 
<a name="l01278"></a>01278   <a class="code" href="group__DBusTransport.html#g31d6dbc864c9ea643d72521bbb1b7c56">_dbus_transport_ref</a> (transport);
<a name="l01279"></a>01279 
<a name="l01280"></a>01280   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l01281"></a>01281   
<a name="l01282"></a>01282   <span class="keywordflow">return</span> connection;
<a name="l01283"></a>01283   
<a name="l01284"></a>01284  error:
<a name="l01285"></a>01285   <span class="keywordflow">if</span> (disconnect_message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01286"></a>01286     <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (disconnect_message);
<a name="l01287"></a>01287   
<a name="l01288"></a>01288   <span class="keywordflow">if</span> (disconnect_link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01289"></a>01289     <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (disconnect_link);
<a name="l01290"></a>01290   
<a name="l01291"></a>01291   <span class="keywordflow">if</span> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01292"></a>01292     {
<a name="l01293"></a>01293       <a class="code" href="group__DBusThreadsInternals.html#g29444a34b569fca22fac48067832aacd">_dbus_condvar_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>);
<a name="l01294"></a>01294       <a class="code" href="group__DBusThreadsInternals.html#g29444a34b569fca22fac48067832aacd">_dbus_condvar_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>);
<a name="l01295"></a>01295       <a class="code" href="group__DBusThreadsInternals.html#gfd7f94bf0c265660749ffa690e76248a">_dbus_mutex_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>);
<a name="l01296"></a>01296       <a class="code" href="group__DBusThreadsInternals.html#gfd7f94bf0c265660749ffa690e76248a">_dbus_mutex_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01297"></a>01297       <a class="code" href="group__DBusThreadsInternals.html#gfd7f94bf0c265660749ffa690e76248a">_dbus_mutex_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l01298"></a>01298       <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (connection);
<a name="l01299"></a>01299     }
<a name="l01300"></a>01300   <span class="keywordflow">if</span> (pending_replies)
<a name="l01301"></a>01301     <a class="code" href="group__DBusHashTable.html#g96b777e00764b44e0f3216fd8478f5a9">_dbus_hash_table_unref</a> (pending_replies);
<a name="l01302"></a>01302   
<a name="l01303"></a>01303   <span class="keywordflow">if</span> (watch_list)
<a name="l01304"></a>01304     <a class="code" href="group__DBusWatchInternals.html#gc3f75c0da2c8c51e8708f45dd27f9e2d">_dbus_watch_list_free</a> (watch_list);
<a name="l01305"></a>01305 
<a name="l01306"></a>01306   <span class="keywordflow">if</span> (timeout_list)
<a name="l01307"></a>01307     <a class="code" href="group__DBusTimeoutInternals.html#g1b399ef2d7f128e59bb32dbb5b590e1b">_dbus_timeout_list_free</a> (timeout_list);
<a name="l01308"></a>01308 
<a name="l01309"></a>01309   <span class="keywordflow">if</span> (outgoing_counter)
<a name="l01310"></a>01310     <a class="code" href="group__DBusResources.html#g48d9b53d1a395ab3c4f1846ca569ef3f">_dbus_counter_unref</a> (outgoing_counter);
<a name="l01311"></a>01311 
<a name="l01312"></a>01312   <span class="keywordflow">if</span> (objects)
<a name="l01313"></a>01313     <a class="code" href="group__DBusObjectTree.html#g7639e273ab160c422a7cef0cda60ded5">_dbus_object_tree_unref</a> (objects);
<a name="l01314"></a>01314   
<a name="l01315"></a>01315   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01316"></a>01316 }
<a name="l01317"></a>01317 
<a name="l01325"></a>01325 <a class="code" href="structDBusConnection.html">DBusConnection</a> *
<a name="l01326"></a><a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">01326</a> <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01327"></a>01327 {  
<a name="l01328"></a>01328   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01329"></a>01329   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>);
<a name="l01330"></a>01330 
<a name="l01331"></a>01331   HAVE_LOCK_CHECK (connection);
<a name="l01332"></a>01332   
<a name="l01333"></a>01333 <span class="preprocessor">#ifdef DBUS_HAVE_ATOMIC_INT</span>
<a name="l01334"></a>01334 <span class="preprocessor"></span>  <a class="code" href="group__DBusSysdeps.html#ge74c3fcf12acaeccdb152ef907de951c">_dbus_atomic_inc</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>);
<a name="l01335"></a>01335 <span class="preprocessor">#else</span>
<a name="l01336"></a>01336 <span class="preprocessor"></span>  <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l01337"></a>01337   connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> += 1;
<a name="l01338"></a>01338 <span class="preprocessor">#endif</span>
<a name="l01339"></a>01339 <span class="preprocessor"></span>
<a name="l01340"></a>01340   <span class="keywordflow">return</span> connection;
<a name="l01341"></a>01341 }
<a name="l01342"></a>01342 
<a name="l01349"></a>01349 <span class="keywordtype">void</span>
<a name="l01350"></a><a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">01350</a> <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01351"></a>01351 {
<a name="l01352"></a>01352   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> last_unref;
<a name="l01353"></a>01353 
<a name="l01354"></a>01354   HAVE_LOCK_CHECK (connection);
<a name="l01355"></a>01355   
<a name="l01356"></a>01356   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01357"></a>01357 
<a name="l01358"></a>01358   <span class="comment">/* The connection lock is better than the global</span>
<a name="l01359"></a>01359 <span class="comment">   * lock in the atomic increment fallback</span>
<a name="l01360"></a>01360 <span class="comment">   */</span>
<a name="l01361"></a>01361   
<a name="l01362"></a>01362 <span class="preprocessor">#ifdef DBUS_HAVE_ATOMIC_INT</span>
<a name="l01363"></a>01363 <span class="preprocessor"></span>  last_unref = (<a class="code" href="group__DBusSysdeps.html#g3c50a069f795dceeb9172fe2b517bbdc">_dbus_atomic_dec</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>) == 1);
<a name="l01364"></a>01364 <span class="preprocessor">#else</span>
<a name="l01365"></a>01365 <span class="preprocessor"></span>  <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l01366"></a>01366 
<a name="l01367"></a>01367   connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> -= 1;
<a name="l01368"></a>01368   last_unref = (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);  
<a name="l01369"></a>01369 <span class="preprocessor">#if 0</span>
<a name="l01370"></a>01370 <span class="preprocessor"></span>  printf (<span class="stringliteral">"unref_unlocked() connection %p count = %d\n"</span>, connection, connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a>);
<a name="l01371"></a>01371 <span class="preprocessor">#endif</span>
<a name="l01372"></a>01372 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l01373"></a>01373 <span class="preprocessor"></span>  
<a name="l01374"></a>01374   <span class="keywordflow">if</span> (last_unref)
<a name="l01375"></a>01375     _dbus_connection_last_unref (connection);
<a name="l01376"></a>01376 }
<a name="l01377"></a>01377 
<a name="l01378"></a>01378 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>
<a name="l01379"></a>01379 _dbus_connection_get_next_client_serial (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01380"></a>01380 {
<a name="l01381"></a>01381   <span class="keywordtype">int</span> serial;
<a name="l01382"></a>01382 
<a name="l01383"></a>01383   serial = connection-&gt;<a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a>++;
<a name="l01384"></a>01384 
<a name="l01385"></a>01385   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a> &lt; 0)
<a name="l01386"></a>01386     connection-&gt;<a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a> = 1;
<a name="l01387"></a>01387   
<a name="l01388"></a>01388   <span class="keywordflow">return</span> serial;
<a name="l01389"></a>01389 }
<a name="l01390"></a>01390 
<a name="l01404"></a>01404 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01405"></a><a class="code" href="group__DBusConnectionInternals.html#g12756797bd5c1918aa065f9c37ed7bba">01405</a> <a class="code" href="group__DBusConnectionInternals.html#g12756797bd5c1918aa065f9c37ed7bba">_dbus_connection_handle_watch</a> (<a class="code" href="structDBusWatch.html">DBusWatch</a>                   *watch,
<a name="l01406"></a>01406                                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>                 condition,
<a name="l01407"></a>01407                                <span class="keywordtype">void</span>                        *data)
<a name="l01408"></a>01408 {
<a name="l01409"></a>01409   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l01410"></a>01410   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l01411"></a>01411   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l01412"></a>01412 
<a name="l01413"></a>01413   connection = data;
<a name="l01414"></a>01414 
<a name="l01415"></a>01415   _dbus_verbose (<span class="stringliteral">"%s start\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01416"></a>01416   
<a name="l01417"></a>01417   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l01418"></a>01418   _dbus_connection_acquire_io_path (connection, -1);
<a name="l01419"></a>01419   HAVE_LOCK_CHECK (connection);
<a name="l01420"></a>01420   retval = <a class="code" href="group__DBusTransport.html#g4a010098fe079eb6f201ff034d15fdff">_dbus_transport_handle_watch</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l01421"></a>01421                                          watch, condition);
<a name="l01422"></a>01422 
<a name="l01423"></a>01423   _dbus_connection_release_io_path (connection);
<a name="l01424"></a>01424 
<a name="l01425"></a>01425   HAVE_LOCK_CHECK (connection);
<a name="l01426"></a>01426 
<a name="l01427"></a>01427   _dbus_verbose (<span class="stringliteral">"%s middle\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01428"></a>01428   
<a name="l01429"></a>01429   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l01430"></a>01430 
<a name="l01431"></a>01431   <span class="comment">/* this calls out to user code */</span>
<a name="l01432"></a>01432   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l01433"></a>01433 
<a name="l01434"></a>01434   _dbus_verbose (<span class="stringliteral">"%s end\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01435"></a>01435   
<a name="l01436"></a>01436   <span class="keywordflow">return</span> retval;
<a name="l01437"></a>01437 }
<a name="l01438"></a>01438 
<a name="l01439"></a>01439 <a class="code" href="group__DBusInternalsUtils.html#gc8d22e9846ecc2845959082076de899b">_DBUS_DEFINE_GLOBAL_LOCK</a> (shared_connections);
<a name="l01440"></a>01440 <span class="keyword">static</span> <a class="code" href="structDBusHashTable.html">DBusHashTable</a> *shared_connections = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01441"></a>01441 
<a name="l01442"></a>01442 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01443"></a>01443 shared_connections_shutdown (<span class="keywordtype">void</span> *data)
<a name="l01444"></a>01444 {
<a name="l01445"></a>01445   <span class="keywordtype">int</span> n_entries;
<a name="l01446"></a>01446   
<a name="l01447"></a>01447   <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (shared_connections);
<a name="l01448"></a>01448   
<a name="l01449"></a>01449   <span class="comment">/* This is a little bit unpleasant... better ideas? */</span>
<a name="l01450"></a>01450   <span class="keywordflow">while</span> ((n_entries = <a class="code" href="group__DBusHashTable.html#gd48297fc27442c19a7c4bd4d1ef9ef77">_dbus_hash_table_get_n_entries</a> (shared_connections)) &gt; 0)
<a name="l01451"></a>01451     {
<a name="l01452"></a>01452       <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l01453"></a>01453       <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01454"></a>01454       <a class="code" href="structDBusHashIter.html">DBusHashIter</a> iter;
<a name="l01455"></a>01455       
<a name="l01456"></a>01456       <a class="code" href="group__DBusHashTable.html#g1b0e6df8a8617ef0f8f25adfba3acc4c">_dbus_hash_iter_init</a> (shared_connections, &amp;iter);
<a name="l01457"></a>01457       <a class="code" href="group__DBusHashTable.html#g723e61fcc91ca673e90ff872c07ea19c">_dbus_hash_iter_next</a> (&amp;iter);
<a name="l01458"></a>01458        
<a name="l01459"></a>01459       connection = <a class="code" href="group__DBusHashTable.html#g34bf277ee37f919bd00516b5ae4e12b5">_dbus_hash_iter_get_value</a> (&amp;iter);
<a name="l01460"></a>01460 
<a name="l01461"></a>01461       <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01462"></a>01462 
<a name="l01463"></a>01463       <a class="code" href="group__DBusConnection.html#gd9a07052fe293b559303efc8546dc9ec">dbus_connection_ref</a> (connection);
<a name="l01464"></a>01464       <a class="code" href="group__DBusConnectionInternals.html#gdc46f7abfe925f9860fc8c64aeb29ad2">_dbus_connection_close_possibly_shared</a> (connection);
<a name="l01465"></a>01465 
<a name="l01466"></a>01466       <span class="comment">/* Churn through to the Disconnected message */</span>
<a name="l01467"></a>01467       <span class="keywordflow">while</span> ((message = <a class="code" href="group__DBusConnection.html#g45dd4e9c961e8d1a4d3f8cb0e4a4123d">dbus_connection_pop_message</a> (connection)))
<a name="l01468"></a>01468         {
<a name="l01469"></a>01469           <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01470"></a>01470         }
<a name="l01471"></a>01471       <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l01472"></a>01472       
<a name="l01473"></a>01473       <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (shared_connections);
<a name="l01474"></a>01474 
<a name="l01475"></a>01475       <span class="comment">/* The connection should now be dead and not in our hash ... */</span>
<a name="l01476"></a>01476       <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusHashTable.html#gd48297fc27442c19a7c4bd4d1ef9ef77">_dbus_hash_table_get_n_entries</a> (shared_connections) &lt; n_entries);
<a name="l01477"></a>01477     }
<a name="l01478"></a>01478 
<a name="l01479"></a>01479   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusHashTable.html#gd48297fc27442c19a7c4bd4d1ef9ef77">_dbus_hash_table_get_n_entries</a> (shared_connections) == 0);
<a name="l01480"></a>01480   
<a name="l01481"></a>01481   <a class="code" href="group__DBusHashTable.html#g96b777e00764b44e0f3216fd8478f5a9">_dbus_hash_table_unref</a> (shared_connections);
<a name="l01482"></a>01482   shared_connections = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01483"></a>01483   
<a name="l01484"></a>01484   <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01485"></a>01485 }
<a name="l01486"></a>01486 
<a name="l01487"></a>01487 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01488"></a>01488 connection_lookup_shared (<a class="code" href="structDBusAddressEntry.html">DBusAddressEntry</a>  *entry,
<a name="l01489"></a>01489                           <a class="code" href="structDBusConnection.html">DBusConnection</a>   **result)
<a name="l01490"></a>01490 {
<a name="l01491"></a>01491   _dbus_verbose (<span class="stringliteral">"checking for existing connection\n"</span>);
<a name="l01492"></a>01492   
<a name="l01493"></a>01493   *result = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01494"></a>01494   
<a name="l01495"></a>01495   <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (shared_connections);
<a name="l01496"></a>01496 
<a name="l01497"></a>01497   <span class="keywordflow">if</span> (shared_connections == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01498"></a>01498     {
<a name="l01499"></a>01499       _dbus_verbose (<span class="stringliteral">"creating shared_connections hash table\n"</span>);
<a name="l01500"></a>01500       
<a name="l01501"></a>01501       shared_connections = <a class="code" href="group__DBusHashTable.html#gc8e434348a354b9606d4c50c127a5eb4">_dbus_hash_table_new</a> (<a class="code" href="group__DBusHashTable.html#ggb0ab9767ffa5b6720a13b3d741630852481fd0166d28da725b3e97f15192434e">DBUS_HASH_STRING</a>,
<a name="l01502"></a>01502                                                  <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a>,
<a name="l01503"></a>01503                                                  <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01504"></a>01504       <span class="keywordflow">if</span> (shared_connections == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01505"></a>01505         {
<a name="l01506"></a>01506           <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01507"></a>01507           <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01508"></a>01508         }
<a name="l01509"></a>01509 
<a name="l01510"></a>01510       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMemoryInternals.html#g8dc6d5dd0a0e7901ab793da7403ee734">_dbus_register_shutdown_func</a> (shared_connections_shutdown, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l01511"></a>01511         {
<a name="l01512"></a>01512           <a class="code" href="group__DBusHashTable.html#g96b777e00764b44e0f3216fd8478f5a9">_dbus_hash_table_unref</a> (shared_connections);
<a name="l01513"></a>01513           shared_connections = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01514"></a>01514           <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01515"></a>01515           <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01516"></a>01516         }
<a name="l01517"></a>01517 
<a name="l01518"></a>01518       _dbus_verbose (<span class="stringliteral">"  successfully created shared_connections\n"</span>);
<a name="l01519"></a>01519       
<a name="l01520"></a>01520       <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01521"></a>01521       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>; <span class="comment">/* no point looking up in the hash we just made */</span>
<a name="l01522"></a>01522     }
<a name="l01523"></a>01523   <span class="keywordflow">else</span>
<a name="l01524"></a>01524     {
<a name="l01525"></a>01525       <span class="keyword">const</span> <span class="keywordtype">char</span> *guid;
<a name="l01526"></a>01526 
<a name="l01527"></a>01527       guid = <a class="code" href="group__DBusAddress.html#g531aca53af647b833c54b6ab345bc549">dbus_address_entry_get_value</a> (entry, <span class="stringliteral">"guid"</span>);
<a name="l01528"></a>01528       
<a name="l01529"></a>01529       <span class="keywordflow">if</span> (guid != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01530"></a>01530         {
<a name="l01531"></a>01531           <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l01532"></a>01532           
<a name="l01533"></a>01533           connection = <a class="code" href="group__DBusHashTable.html#gd51eb3fe682721dd4f6a920ca87cb730">_dbus_hash_table_lookup_string</a> (shared_connections,
<a name="l01534"></a>01534                                                        guid);
<a name="l01535"></a>01535 
<a name="l01536"></a>01536           <span class="keywordflow">if</span> (connection)
<a name="l01537"></a>01537             {
<a name="l01538"></a>01538               <span class="comment">/* The DBusConnection can't be finalized without taking</span>
<a name="l01539"></a>01539 <span class="comment">               * the shared_connections lock to remove it from the</span>
<a name="l01540"></a>01540 <span class="comment">               * hash.  So it's safe to ref the connection here.</span>
<a name="l01541"></a>01541 <span class="comment">               * However, it may be disconnected if the Disconnected</span>
<a name="l01542"></a>01542 <span class="comment">               * message hasn't been processed yet, in which case we</span>
<a name="l01543"></a>01543 <span class="comment">               * want to pretend it isn't in the hash and avoid</span>
<a name="l01544"></a>01544 <span class="comment">               * returning it.</span>
<a name="l01545"></a>01545 <span class="comment">               *</span>
<a name="l01546"></a>01546 <span class="comment">               * The idea is to avoid ever returning a disconnected connection</span>
<a name="l01547"></a>01547 <span class="comment">               * from dbus_connection_open(). We could just synchronously</span>
<a name="l01548"></a>01548 <span class="comment">               * drop our shared ref to the connection on connection disconnect,</span>
<a name="l01549"></a>01549 <span class="comment">               * and then assert here that the connection is connected, but</span>
<a name="l01550"></a>01550 <span class="comment">               * that causes reentrancy headaches.</span>
<a name="l01551"></a>01551 <span class="comment">               */</span>
<a name="l01552"></a>01552               <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l01553"></a>01553               <span class="keywordflow">if</span> (_dbus_connection_get_is_connected_unlocked (connection))
<a name="l01554"></a>01554                 {
<a name="l01555"></a>01555                   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l01556"></a>01556                   *result = connection;
<a name="l01557"></a>01557                   _dbus_verbose (<span class="stringliteral">"looked up existing connection to server guid %s\n"</span>,
<a name="l01558"></a>01558                                  guid);
<a name="l01559"></a>01559                 }
<a name="l01560"></a>01560               <span class="keywordflow">else</span>
<a name="l01561"></a>01561                 {
<a name="l01562"></a>01562                   _dbus_verbose (<span class="stringliteral">"looked up existing connection to server guid %s but it was disconnected so ignoring it\n"</span>,
<a name="l01563"></a>01563                                  guid);
<a name="l01564"></a>01564                 }
<a name="l01565"></a>01565               <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l01566"></a>01566             }
<a name="l01567"></a>01567         }
<a name="l01568"></a>01568       
<a name="l01569"></a>01569       <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01570"></a>01570       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01571"></a>01571     }
<a name="l01572"></a>01572 }
<a name="l01573"></a>01573 
<a name="l01574"></a>01574 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01575"></a>01575 connection_record_shared_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l01576"></a>01576                                    <span class="keyword">const</span> <span class="keywordtype">char</span>     *guid)
<a name="l01577"></a>01577 {
<a name="l01578"></a>01578   <span class="keywordtype">char</span> *guid_key;
<a name="l01579"></a>01579   <span class="keywordtype">char</span> *guid_in_connection;
<a name="l01580"></a>01580 
<a name="l01581"></a>01581   HAVE_LOCK_CHECK (connection);
<a name="l01582"></a>01582   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01583"></a>01583   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a>);
<a name="l01584"></a>01584 
<a name="l01585"></a>01585   <span class="comment">/* get a hard ref on this connection, even if</span>
<a name="l01586"></a>01586 <span class="comment">   * we won't in fact store it in the hash, we still</span>
<a name="l01587"></a>01587 <span class="comment">   * need to hold a ref on it until it's disconnected.</span>
<a name="l01588"></a>01588 <span class="comment">   */</span>
<a name="l01589"></a>01589   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l01590"></a>01590 
<a name="l01591"></a>01591   <span class="keywordflow">if</span> (guid == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01592"></a>01592     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>; <span class="comment">/* don't store in the hash */</span>
<a name="l01593"></a>01593   
<a name="l01594"></a>01594   <span class="comment">/* A separate copy of the key is required in the hash table, because</span>
<a name="l01595"></a>01595 <span class="comment">   * we don't have a lock on the connection when we are doing a hash</span>
<a name="l01596"></a>01596 <span class="comment">   * lookup.</span>
<a name="l01597"></a>01597 <span class="comment">   */</span>
<a name="l01598"></a>01598   
<a name="l01599"></a>01599   guid_key = <a class="code" href="group__DBusInternalsUtils.html#g9d00d77f6595b9d7ac1baf59d44bf58c">_dbus_strdup</a> (guid);
<a name="l01600"></a>01600   <span class="keywordflow">if</span> (guid_key == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01601"></a>01601     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01602"></a>01602 
<a name="l01603"></a>01603   guid_in_connection = <a class="code" href="group__DBusInternalsUtils.html#g9d00d77f6595b9d7ac1baf59d44bf58c">_dbus_strdup</a> (guid);
<a name="l01604"></a>01604   <span class="keywordflow">if</span> (guid_in_connection == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01605"></a>01605     {
<a name="l01606"></a>01606       <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (guid_key);
<a name="l01607"></a>01607       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01608"></a>01608     }
<a name="l01609"></a>01609   
<a name="l01610"></a>01610   <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (shared_connections);
<a name="l01611"></a>01611   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (shared_connections != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01612"></a>01612   
<a name="l01613"></a>01613   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusHashTable.html#g43e98a91a11952824c544330e19f6c22">_dbus_hash_table_insert_string</a> (shared_connections,
<a name="l01614"></a>01614                                        guid_key, connection))
<a name="l01615"></a>01615     {
<a name="l01616"></a>01616       <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (guid_key);
<a name="l01617"></a>01617       <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (guid_in_connection);
<a name="l01618"></a>01618       <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01619"></a>01619       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01620"></a>01620     }
<a name="l01621"></a>01621 
<a name="l01622"></a>01622   connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a> = guid_in_connection;
<a name="l01623"></a>01623 
<a name="l01624"></a>01624   _dbus_verbose (<span class="stringliteral">"stored connection to %s to be shared\n"</span>,
<a name="l01625"></a>01625                  connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a>);
<a name="l01626"></a>01626   
<a name="l01627"></a>01627   <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01628"></a>01628 
<a name="l01629"></a>01629   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01630"></a>01630   
<a name="l01631"></a>01631   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01632"></a>01632 }
<a name="l01633"></a>01633 
<a name="l01634"></a>01634 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01635"></a>01635 connection_forget_shared_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01636"></a>01636 {
<a name="l01637"></a>01637   HAVE_LOCK_CHECK (connection);
<a name="l01638"></a>01638 
<a name="l01639"></a>01639   <span class="keywordflow">if</span> (!connection-&gt;<a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a>)
<a name="l01640"></a>01640     <span class="keywordflow">return</span>;
<a name="l01641"></a>01641   
<a name="l01642"></a>01642   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01643"></a>01643     {
<a name="l01644"></a>01644       _dbus_verbose (<span class="stringliteral">"dropping connection to %s out of the shared table\n"</span>,
<a name="l01645"></a>01645                      connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a>);
<a name="l01646"></a>01646       
<a name="l01647"></a>01647       <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (shared_connections);
<a name="l01648"></a>01648       
<a name="l01649"></a>01649       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusHashTable.html#g388d50ce1a07bf0790b9f2ecdb08a396">_dbus_hash_table_remove_string</a> (shared_connections,
<a name="l01650"></a>01650                                            connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a>))
<a name="l01651"></a>01651         <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"connection was not in the shared table"</span>);
<a name="l01652"></a>01652       
<a name="l01653"></a>01653       <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a>);
<a name="l01654"></a>01654       connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01655"></a>01655       <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (shared_connections);
<a name="l01656"></a>01656     }
<a name="l01657"></a>01657   
<a name="l01658"></a>01658   <span class="comment">/* remove our reference held on all shareable connections */</span>
<a name="l01659"></a>01659   <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (connection);
<a name="l01660"></a>01660 }
<a name="l01661"></a>01661 
<a name="l01662"></a>01662 <span class="keyword">static</span> <a class="code" href="structDBusConnection.html">DBusConnection</a>*
<a name="l01663"></a>01663 connection_try_from_address_entry (<a class="code" href="structDBusAddressEntry.html">DBusAddressEntry</a> *entry,
<a name="l01664"></a>01664                                    <a class="code" href="structDBusError.html">DBusError</a>        *error)
<a name="l01665"></a>01665 {
<a name="l01666"></a>01666   <a class="code" href="structDBusTransport.html">DBusTransport</a> *transport;
<a name="l01667"></a>01667   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l01668"></a>01668 
<a name="l01669"></a>01669   transport = <a class="code" href="group__DBusTransport.html#g0893897223056c89f33b2641a7b21cf8">_dbus_transport_open</a> (entry, error);
<a name="l01670"></a>01670 
<a name="l01671"></a>01671   <span class="keywordflow">if</span> (transport == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01672"></a>01672     {
<a name="l01673"></a>01673       _DBUS_ASSERT_ERROR_IS_SET (error);
<a name="l01674"></a>01674       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01675"></a>01675     }
<a name="l01676"></a>01676 
<a name="l01677"></a>01677   connection = <a class="code" href="group__DBusConnectionInternals.html#g2cdffe9215251b69cb39ff36b9f50e6c">_dbus_connection_new_for_transport</a> (transport);
<a name="l01678"></a>01678 
<a name="l01679"></a>01679   <a class="code" href="group__DBusTransport.html#gb7c53c32a2320c81aae8ce4345762e73">_dbus_transport_unref</a> (transport);
<a name="l01680"></a>01680   
<a name="l01681"></a>01681   <span class="keywordflow">if</span> (connection == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01682"></a>01682     {
<a name="l01683"></a>01683       _DBUS_SET_OOM (error);
<a name="l01684"></a>01684       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01685"></a>01685     }
<a name="l01686"></a>01686 
<a name="l01687"></a>01687 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01688"></a>01688 <span class="preprocessor"></span>  <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!connection-&gt;<a class="code" href="structDBusConnection.html#336a7953a4a28e55f6e6a07acfa11df3">have_connection_lock</a>);
<a name="l01689"></a>01689 <span class="preprocessor">#endif</span>
<a name="l01690"></a>01690 <span class="preprocessor"></span>  <span class="keywordflow">return</span> connection;
<a name="l01691"></a>01691 }
<a name="l01692"></a>01692 
<a name="l01693"></a>01693 <span class="comment">/*</span>
<a name="l01694"></a>01694 <span class="comment"> * If the shared parameter is true, then any existing connection will</span>
<a name="l01695"></a>01695 <span class="comment"> * be used (and if a new connection is created, it will be available</span>
<a name="l01696"></a>01696 <span class="comment"> * for use by others). If the shared parameter is false, a new</span>
<a name="l01697"></a>01697 <span class="comment"> * connection will always be created, and the new connection will</span>
<a name="l01698"></a>01698 <span class="comment"> * never be returned to other callers.</span>
<a name="l01699"></a>01699 <span class="comment"> *</span>
<a name="l01700"></a>01700 <span class="comment"> * @param address the address</span>
<a name="l01701"></a>01701 <span class="comment"> * @param shared whether the connection is shared or private</span>
<a name="l01702"></a>01702 <span class="comment"> * @param error error return</span>
<a name="l01703"></a>01703 <span class="comment"> * @returns the connection or #NULL on error</span>
<a name="l01704"></a>01704 <span class="comment"> */</span>
<a name="l01705"></a>01705 <span class="keyword">static</span> <a class="code" href="structDBusConnection.html">DBusConnection</a>*
<a name="l01706"></a>01706 _dbus_connection_open_internal (<span class="keyword">const</span> <span class="keywordtype">char</span>     *address,
<a name="l01707"></a>01707                                 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>     shared,
<a name="l01708"></a>01708                                 <a class="code" href="structDBusError.html">DBusError</a>      *error)
<a name="l01709"></a>01709 {
<a name="l01710"></a>01710   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l01711"></a>01711   <a class="code" href="structDBusAddressEntry.html">DBusAddressEntry</a> **entries;
<a name="l01712"></a>01712   <a class="code" href="structDBusError.html">DBusError</a> tmp_error;
<a name="l01713"></a>01713   <a class="code" href="structDBusError.html">DBusError</a> first_error;
<a name="l01714"></a>01714   <span class="keywordtype">int</span> len, i;
<a name="l01715"></a>01715 
<a name="l01716"></a>01716   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
<a name="l01717"></a>01717 
<a name="l01718"></a>01718   _dbus_verbose (<span class="stringliteral">"opening %s connection to: %s\n"</span>,
<a name="l01719"></a>01719                  shared ? <span class="stringliteral">"shared"</span> : <span class="stringliteral">"private"</span>, address);
<a name="l01720"></a>01720   
<a name="l01721"></a>01721   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusAddress.html#gba56db98921bbe358d8549339a3cf20d">dbus_parse_address</a> (address, &amp;entries, &amp;len, error))
<a name="l01722"></a>01722     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01723"></a>01723 
<a name="l01724"></a>01724   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
<a name="l01725"></a>01725   
<a name="l01726"></a>01726   connection = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01727"></a>01727 
<a name="l01728"></a>01728   <a class="code" href="group__DBusErrors.html#g8ce28eae754237703296599967d7ab77">dbus_error_init</a> (&amp;tmp_error);
<a name="l01729"></a>01729   <a class="code" href="group__DBusErrors.html#g8ce28eae754237703296599967d7ab77">dbus_error_init</a> (&amp;first_error);
<a name="l01730"></a>01730   <span class="keywordflow">for</span> (i = 0; i &lt; len; i++)
<a name="l01731"></a>01731     {
<a name="l01732"></a>01732       <span class="keywordflow">if</span> (shared)
<a name="l01733"></a>01733         {
<a name="l01734"></a>01734           <span class="keywordflow">if</span> (!connection_lookup_shared (entries[i], &amp;connection))
<a name="l01735"></a>01735             _DBUS_SET_OOM (&amp;tmp_error);
<a name="l01736"></a>01736         }
<a name="l01737"></a>01737 
<a name="l01738"></a>01738       <span class="keywordflow">if</span> (connection == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01739"></a>01739         {
<a name="l01740"></a>01740           connection = connection_try_from_address_entry (entries[i],
<a name="l01741"></a>01741                                                           &amp;tmp_error);
<a name="l01742"></a>01742 
<a name="l01743"></a>01743           <span class="keywordflow">if</span> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> &amp;&amp; shared)
<a name="l01744"></a>01744             {
<a name="l01745"></a>01745               <span class="keyword">const</span> <span class="keywordtype">char</span> *guid;
<a name="l01746"></a>01746                   
<a name="l01747"></a>01747               connection-&gt;<a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01748"></a>01748                   
<a name="l01749"></a>01749               <span class="comment">/* guid may be NULL */</span>
<a name="l01750"></a>01750               guid = <a class="code" href="group__DBusAddress.html#g531aca53af647b833c54b6ab345bc549">dbus_address_entry_get_value</a> (entries[i], <span class="stringliteral">"guid"</span>);
<a name="l01751"></a>01751                   
<a name="l01752"></a>01752               <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l01753"></a>01753           
<a name="l01754"></a>01754               <span class="keywordflow">if</span> (!connection_record_shared_unlocked (connection, guid))
<a name="l01755"></a>01755                 {
<a name="l01756"></a>01756                   _DBUS_SET_OOM (&amp;tmp_error);
<a name="l01757"></a>01757                   _dbus_connection_close_possibly_shared_and_unlock (connection);
<a name="l01758"></a>01758                   <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l01759"></a>01759                   connection = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01760"></a>01760                 }
<a name="l01761"></a>01761               <span class="keywordflow">else</span>
<a name="l01762"></a>01762                 <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l01763"></a>01763             }
<a name="l01764"></a>01764         }
<a name="l01765"></a>01765       
<a name="l01766"></a>01766       <span class="keywordflow">if</span> (connection)
<a name="l01767"></a>01767         <span class="keywordflow">break</span>;
<a name="l01768"></a>01768 
<a name="l01769"></a>01769       _DBUS_ASSERT_ERROR_IS_SET (&amp;tmp_error);
<a name="l01770"></a>01770       
<a name="l01771"></a>01771       <span class="keywordflow">if</span> (i == 0)
<a name="l01772"></a>01772         <a class="code" href="group__DBusErrors.html#g9857517c813b19ef87b12f00558cecda">dbus_move_error</a> (&amp;tmp_error, &amp;first_error);
<a name="l01773"></a>01773       <span class="keywordflow">else</span>
<a name="l01774"></a>01774         <a class="code" href="group__DBusErrors.html#gd192d53cf930b1b12e1ce91bc0963709">dbus_error_free</a> (&amp;tmp_error);
<a name="l01775"></a>01775     }
<a name="l01776"></a>01776   
<a name="l01777"></a>01777   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
<a name="l01778"></a>01778   _DBUS_ASSERT_ERROR_IS_CLEAR (&amp;tmp_error);
<a name="l01779"></a>01779   
<a name="l01780"></a>01780   <span class="keywordflow">if</span> (connection == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01781"></a>01781     {
<a name="l01782"></a>01782       _DBUS_ASSERT_ERROR_IS_SET (&amp;first_error);
<a name="l01783"></a>01783       <a class="code" href="group__DBusErrors.html#g9857517c813b19ef87b12f00558cecda">dbus_move_error</a> (&amp;first_error, error);
<a name="l01784"></a>01784     }
<a name="l01785"></a>01785   <span class="keywordflow">else</span>
<a name="l01786"></a>01786     <a class="code" href="group__DBusErrors.html#gd192d53cf930b1b12e1ce91bc0963709">dbus_error_free</a> (&amp;first_error);
<a name="l01787"></a>01787   
<a name="l01788"></a>01788   <a class="code" href="group__DBusAddress.html#geec9b8bf0e25269d7b3e9922b01968c1">dbus_address_entries_free</a> (entries);
<a name="l01789"></a>01789   <span class="keywordflow">return</span> connection;
<a name="l01790"></a>01790 }
<a name="l01791"></a>01791 
<a name="l01800"></a>01800 <span class="keywordtype">void</span>
<a name="l01801"></a><a class="code" href="group__DBusConnectionInternals.html#gdc46f7abfe925f9860fc8c64aeb29ad2">01801</a> <a class="code" href="group__DBusConnectionInternals.html#gdc46f7abfe925f9860fc8c64aeb29ad2">_dbus_connection_close_possibly_shared</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01802"></a>01802 {
<a name="l01803"></a>01803   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01804"></a>01804   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>);
<a name="l01805"></a>01805 
<a name="l01806"></a>01806   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l01807"></a>01807   _dbus_connection_close_possibly_shared_and_unlock (connection);
<a name="l01808"></a>01808 }
<a name="l01809"></a>01809 
<a name="l01810"></a>01810 <span class="keyword">static</span> <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a>*
<a name="l01811"></a>01811 _dbus_connection_preallocate_send_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l01812"></a>01812 {
<a name="l01813"></a>01813   <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated;
<a name="l01814"></a>01814 
<a name="l01815"></a>01815   HAVE_LOCK_CHECK (connection);
<a name="l01816"></a>01816   
<a name="l01817"></a>01817   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01818"></a>01818   
<a name="l01819"></a>01819   preallocated = <a class="code" href="group__DBusMemory.html#g54ccb556e7964112a825a7f46c156ca0">dbus_new</a> (<a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a>, 1);
<a name="l01820"></a>01820   <span class="keywordflow">if</span> (preallocated == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01821"></a>01821     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01822"></a>01822 
<a name="l01823"></a>01823   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01824"></a>01824     {
<a name="l01825"></a>01825       preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a> =
<a name="l01826"></a>01826         <a class="code" href="group__DBusList.html#gab9a957eca9bf5466bbf377a23b4b25c">_dbus_list_pop_first_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>);
<a name="l01827"></a>01827       preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01828"></a>01828     }
<a name="l01829"></a>01829   <span class="keywordflow">else</span>
<a name="l01830"></a>01830     {
<a name="l01831"></a>01831       preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a> = <a class="code" href="group__DBusList.html#gc20b9981531cef590d49a59240344cd8">_dbus_list_alloc_link</a> (<a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01832"></a>01832       <span class="keywordflow">if</span> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01833"></a>01833         <span class="keywordflow">goto</span> failed_0;
<a name="l01834"></a>01834     }
<a name="l01835"></a>01835   
<a name="l01836"></a>01836   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01837"></a>01837     {
<a name="l01838"></a>01838       preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a> =
<a name="l01839"></a>01839         <a class="code" href="group__DBusList.html#gab9a957eca9bf5466bbf377a23b4b25c">_dbus_list_pop_first_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>);
<a name="l01840"></a>01840       preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a> = connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>;
<a name="l01841"></a>01841     }
<a name="l01842"></a>01842   <span class="keywordflow">else</span>
<a name="l01843"></a>01843     {
<a name="l01844"></a>01844       preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a> = <a class="code" href="group__DBusList.html#gc20b9981531cef590d49a59240344cd8">_dbus_list_alloc_link</a> (connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>);
<a name="l01845"></a>01845       <span class="keywordflow">if</span> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01846"></a>01846         <span class="keywordflow">goto</span> failed_1;
<a name="l01847"></a>01847     }
<a name="l01848"></a>01848 
<a name="l01849"></a>01849   <a class="code" href="group__DBusResources.html#ge93240c77bfb66642453518c9bb90bc4">_dbus_counter_ref</a> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l01850"></a>01850 
<a name="l01851"></a>01851   preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#465af3647772c89500df0b46f43d035b">connection</a> = connection;
<a name="l01852"></a>01852   
<a name="l01853"></a>01853   <span class="keywordflow">return</span> preallocated;
<a name="l01854"></a>01854   
<a name="l01855"></a>01855  failed_1:
<a name="l01856"></a>01856   <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>);
<a name="l01857"></a>01857  failed_0:
<a name="l01858"></a>01858   <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (preallocated);
<a name="l01859"></a>01859   
<a name="l01860"></a>01860   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01861"></a>01861 }
<a name="l01862"></a>01862 
<a name="l01863"></a>01863 <span class="comment">/* Called with lock held, does not update dispatch status */</span>
<a name="l01864"></a>01864 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01865"></a>01865 _dbus_connection_send_preallocated_unlocked_no_update (<a class="code" href="structDBusConnection.html">DBusConnection</a>       *connection,
<a name="l01866"></a>01866                                                        <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated,
<a name="l01867"></a>01867                                                        <a class="code" href="structDBusMessage.html">DBusMessage</a>          *message,
<a name="l01868"></a>01868                                                        <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>        *client_serial)
<a name="l01869"></a>01869 {
<a name="l01870"></a>01870   <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> serial;
<a name="l01871"></a>01871   <span class="keyword">const</span> <span class="keywordtype">char</span> *sig;
<a name="l01872"></a>01872 
<a name="l01873"></a>01873   preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a> = message;
<a name="l01874"></a>01874   <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>,
<a name="l01875"></a>01875                            preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>);
<a name="l01876"></a>01876 
<a name="l01877"></a>01877   <a class="code" href="group__DBusMessageInternals.html#g444052d30845d5914fa988fad0588170">_dbus_message_add_size_counter_link</a> (message,
<a name="l01878"></a>01878                                        preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>);
<a name="l01879"></a>01879 
<a name="l01880"></a>01880   <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (preallocated);
<a name="l01881"></a>01881   preallocated = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01882"></a>01882   
<a name="l01883"></a>01883   <a class="code" href="group__DBusMessage.html#g984ff98c7d031a9ea9e90ede2140d395">dbus_message_ref</a> (message);
<a name="l01884"></a>01884   
<a name="l01885"></a>01885   connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> += 1;
<a name="l01886"></a>01886 
<a name="l01887"></a>01887   sig = <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message);
<a name="l01888"></a>01888   
<a name="l01889"></a>01889   _dbus_verbose (<span class="stringliteral">"Message %p (%d %s %s %s '%s') for %s added to outgoing queue %p, %d pending to send\n"</span>,
<a name="l01890"></a>01890                  message,
<a name="l01891"></a>01891                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message),
<a name="l01892"></a>01892                  <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message) ?
<a name="l01893"></a>01893                  <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message) :
<a name="l01894"></a>01894                  <span class="stringliteral">"no path"</span>,
<a name="l01895"></a>01895                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) ?
<a name="l01896"></a>01896                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) :
<a name="l01897"></a>01897                  <span class="stringliteral">"no interface"</span>,
<a name="l01898"></a>01898                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) ?
<a name="l01899"></a>01899                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) :
<a name="l01900"></a>01900                  <span class="stringliteral">"no member"</span>,
<a name="l01901"></a>01901                  sig,
<a name="l01902"></a>01902                  <a class="code" href="group__DBusMessage.html#g3def34b29d7b3bbb06235e04046e8236">dbus_message_get_destination</a> (message) ?
<a name="l01903"></a>01903                  <a class="code" href="group__DBusMessage.html#g3def34b29d7b3bbb06235e04046e8236">dbus_message_get_destination</a> (message) :
<a name="l01904"></a>01904                  <span class="stringliteral">"null"</span>,
<a name="l01905"></a>01905                  connection,
<a name="l01906"></a>01906                  connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a>);
<a name="l01907"></a>01907 
<a name="l01908"></a>01908   <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (message) == 0)
<a name="l01909"></a>01909     {
<a name="l01910"></a>01910       serial = _dbus_connection_get_next_client_serial (connection);
<a name="l01911"></a>01911       <a class="code" href="group__DBusMessageInternals.html#g0d9af43afd808b3543ac43b22e731508">_dbus_message_set_serial</a> (message, serial);
<a name="l01912"></a>01912       <span class="keywordflow">if</span> (client_serial)
<a name="l01913"></a>01913         *client_serial = serial;
<a name="l01914"></a>01914     }
<a name="l01915"></a>01915   <span class="keywordflow">else</span>
<a name="l01916"></a>01916     {
<a name="l01917"></a>01917       <span class="keywordflow">if</span> (client_serial)
<a name="l01918"></a>01918         *client_serial = <a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (message);
<a name="l01919"></a>01919     }
<a name="l01920"></a>01920 
<a name="l01921"></a>01921   _dbus_verbose (<span class="stringliteral">"Message %p serial is %u\n"</span>,
<a name="l01922"></a>01922                  message, <a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (message));
<a name="l01923"></a>01923   
<a name="l01924"></a>01924   <a class="code" href="group__DBusMessageInternals.html#gb4ea319b17b104f3b930e5e4b7c13a3a">_dbus_message_lock</a> (message);
<a name="l01925"></a>01925 
<a name="l01926"></a>01926   <span class="comment">/* Now we need to run an iteration to hopefully just write the messages</span>
<a name="l01927"></a>01927 <span class="comment">   * out immediately, and otherwise get them queued up</span>
<a name="l01928"></a>01928 <span class="comment">   */</span>
<a name="l01929"></a>01929   <a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">_dbus_connection_do_iteration_unlocked</a> (connection,
<a name="l01930"></a>01930                                           DBUS_ITERATION_DO_WRITING,
<a name="l01931"></a>01931                                           -1);
<a name="l01932"></a>01932 
<a name="l01933"></a>01933   <span class="comment">/* If stuff is still queued up, be sure we wake up the main loop */</span>
<a name="l01934"></a>01934   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> &gt; 0)
<a name="l01935"></a>01935     _dbus_connection_wakeup_mainloop (connection);
<a name="l01936"></a>01936 }
<a name="l01937"></a>01937 
<a name="l01938"></a>01938 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01939"></a>01939 _dbus_connection_send_preallocated_and_unlock (<a class="code" href="structDBusConnection.html">DBusConnection</a>       *connection,
<a name="l01940"></a>01940                                                <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated,
<a name="l01941"></a>01941                                                <a class="code" href="structDBusMessage.html">DBusMessage</a>          *message,
<a name="l01942"></a>01942                                                <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>        *client_serial)
<a name="l01943"></a>01943 {
<a name="l01944"></a>01944   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l01945"></a>01945 
<a name="l01946"></a>01946   HAVE_LOCK_CHECK (connection);
<a name="l01947"></a>01947   
<a name="l01948"></a>01948   _dbus_connection_send_preallocated_unlocked_no_update (connection,
<a name="l01949"></a>01949                                                          preallocated,
<a name="l01950"></a>01950                                                          message, client_serial);
<a name="l01951"></a>01951 
<a name="l01952"></a>01952   _dbus_verbose (<span class="stringliteral">"%s middle\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l01953"></a>01953   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l01954"></a>01954 
<a name="l01955"></a>01955   <span class="comment">/* this calls out to user code */</span>
<a name="l01956"></a>01956   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l01957"></a>01957 }
<a name="l01958"></a>01958 
<a name="l01968"></a>01968 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01969"></a><a class="code" href="group__DBusConnectionInternals.html#g2974eb1c261305fafc635e14fc575d03">01969</a> <a class="code" href="group__DBusConnectionInternals.html#g2974eb1c261305fafc635e14fc575d03">_dbus_connection_send_and_unlock</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l01970"></a>01970                                   <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message,
<a name="l01971"></a>01971                                   <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>  *client_serial)
<a name="l01972"></a>01972 {
<a name="l01973"></a>01973   <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated;
<a name="l01974"></a>01974 
<a name="l01975"></a>01975   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01976"></a>01976   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01977"></a>01977   
<a name="l01978"></a>01978   preallocated = _dbus_connection_preallocate_send_unlocked (connection);
<a name="l01979"></a>01979   <span class="keywordflow">if</span> (preallocated == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01980"></a>01980     {
<a name="l01981"></a>01981       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l01982"></a>01982       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01983"></a>01983     }
<a name="l01984"></a>01984 
<a name="l01985"></a>01985   _dbus_connection_send_preallocated_and_unlock (connection,
<a name="l01986"></a>01986                                                  preallocated,
<a name="l01987"></a>01987                                                  message,
<a name="l01988"></a>01988                                                  client_serial);
<a name="l01989"></a>01989   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01990"></a>01990 }
<a name="l01991"></a>01991 
<a name="l02016"></a>02016 <span class="keywordtype">void</span>
<a name="l02017"></a><a class="code" href="group__DBusConnectionInternals.html#g9f9665902c763bd1ddf9d9bc57d7a7ba">02017</a> <a class="code" href="group__DBusConnectionInternals.html#g9f9665902c763bd1ddf9d9bc57d7a7ba">_dbus_connection_close_if_only_one_ref</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02018"></a>02018 {
<a name="l02019"></a>02019   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02020"></a>02020   
<a name="l02021"></a>02021   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l02022"></a>02022 
<a name="l02023"></a>02023   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 1)
<a name="l02024"></a>02024     _dbus_connection_close_possibly_shared_and_unlock (connection);
<a name="l02025"></a>02025   <span class="keywordflow">else</span>
<a name="l02026"></a>02026     <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02027"></a>02027 }
<a name="l02028"></a>02028 
<a name="l02029"></a>02029 
<a name="l02039"></a>02039 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02040"></a>02040 _dbus_memory_pause_based_on_timeout (<span class="keywordtype">int</span> timeout_milliseconds)
<a name="l02041"></a>02041 {
<a name="l02042"></a>02042   <span class="keywordflow">if</span> (timeout_milliseconds == -1)
<a name="l02043"></a>02043     <a class="code" href="group__DBusSysdeps.html#g1153b4669819148af6b3f6f2b7c9183a">_dbus_sleep_milliseconds</a> (1000);
<a name="l02044"></a>02044   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (timeout_milliseconds &lt; 100)
<a name="l02045"></a>02045     ; <span class="comment">/* just busy loop */</span>
<a name="l02046"></a>02046   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (timeout_milliseconds &lt;= 1000)
<a name="l02047"></a>02047     <a class="code" href="group__DBusSysdeps.html#g1153b4669819148af6b3f6f2b7c9183a">_dbus_sleep_milliseconds</a> (timeout_milliseconds / 3);
<a name="l02048"></a>02048   <span class="keywordflow">else</span>
<a name="l02049"></a>02049     <a class="code" href="group__DBusSysdeps.html#g1153b4669819148af6b3f6f2b7c9183a">_dbus_sleep_milliseconds</a> (1000);
<a name="l02050"></a>02050 }
<a name="l02051"></a>02051 
<a name="l02052"></a>02052 <span class="keyword">static</span> <a class="code" href="structDBusMessage.html">DBusMessage</a> *
<a name="l02053"></a>02053 generate_local_error_message (<a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> serial, 
<a name="l02054"></a>02054                               <span class="keywordtype">char</span> *error_name, 
<a name="l02055"></a>02055                               <span class="keywordtype">char</span> *error_msg)
<a name="l02056"></a>02056 {
<a name="l02057"></a>02057   <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l02058"></a>02058   message = <a class="code" href="group__DBusMessage.html#g4b4e9fad4eb4ceda24488ab67d9f34b0">dbus_message_new</a> (<a class="code" href="group__DBusProtocol.html#g2b9423d95066313d73eeea8eeaf86812">DBUS_MESSAGE_TYPE_ERROR</a>);
<a name="l02059"></a>02059   <span class="keywordflow">if</span> (!message)
<a name="l02060"></a>02060     <span class="keywordflow">goto</span> out;
<a name="l02061"></a>02061 
<a name="l02062"></a>02062   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#gc2adeb77803c00de2b2f1a824c30287f">dbus_message_set_error_name</a> (message, error_name))
<a name="l02063"></a>02063     {
<a name="l02064"></a>02064       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l02065"></a>02065       message = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02066"></a>02066       <span class="keywordflow">goto</span> out; 
<a name="l02067"></a>02067     }
<a name="l02068"></a>02068 
<a name="l02069"></a>02069   <a class="code" href="group__DBusMessage.html#g3a94b84b3c3a5d37911dffca75b631aa">dbus_message_set_no_reply</a> (message, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>); 
<a name="l02070"></a>02070 
<a name="l02071"></a>02071   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#gbaf9939d2ea5f1a4949e64a8737de815">dbus_message_set_reply_serial</a> (message,
<a name="l02072"></a>02072                                       serial))
<a name="l02073"></a>02073     {
<a name="l02074"></a>02074       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l02075"></a>02075       message = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02076"></a>02076       <span class="keywordflow">goto</span> out;
<a name="l02077"></a>02077     }
<a name="l02078"></a>02078 
<a name="l02079"></a>02079   <span class="keywordflow">if</span> (error_msg != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02080"></a>02080     {
<a name="l02081"></a>02081       <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> iter;
<a name="l02082"></a>02082 
<a name="l02083"></a>02083       <a class="code" href="group__DBusMessage.html#g46f26e9d5553b739c7fa0a702f174917">dbus_message_iter_init_append</a> (message, &amp;iter);
<a name="l02084"></a>02084       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#g65eaa4a195e6c77ccfb1bf522fe3ab2e">dbus_message_iter_append_basic</a> (&amp;iter,
<a name="l02085"></a>02085                                            <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02086"></a>02086                                            &amp;error_msg))
<a name="l02087"></a>02087         {
<a name="l02088"></a>02088           <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l02089"></a>02089           message = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02090"></a>02090           <span class="keywordflow">goto</span> out;
<a name="l02091"></a>02091         }
<a name="l02092"></a>02092     }
<a name="l02093"></a>02093 
<a name="l02094"></a>02094  out:
<a name="l02095"></a>02095   <span class="keywordflow">return</span> message;
<a name="l02096"></a>02096 }
<a name="l02097"></a>02097 
<a name="l02098"></a>02098 
<a name="l02099"></a>02099 <span class="comment">/* This is slightly strange since we can pop a message here without</span>
<a name="l02100"></a>02100 <span class="comment"> * the dispatch lock.</span>
<a name="l02101"></a>02101 <span class="comment"> */</span>
<a name="l02102"></a>02102 <span class="keyword">static</span> <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l02103"></a>02103 check_for_reply_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l02104"></a>02104                           <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>   client_serial)
<a name="l02105"></a>02105 {
<a name="l02106"></a>02106   <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l02107"></a>02107 
<a name="l02108"></a>02108   HAVE_LOCK_CHECK (connection);
<a name="l02109"></a>02109   
<a name="l02110"></a>02110   link = <a class="code" href="group__DBusList.html#g1e26ce4fb4acb50593bd5ed2f4eeb3ae">_dbus_list_get_first_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l02111"></a>02111 
<a name="l02112"></a>02112   <span class="keywordflow">while</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02113"></a>02113     {
<a name="l02114"></a>02114       <a class="code" href="structDBusMessage.html">DBusMessage</a> *reply = link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l02115"></a>02115 
<a name="l02116"></a>02116       <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g1d7466805d255a82109d4f71b1008ff2">dbus_message_get_reply_serial</a> (reply) == client_serial)
<a name="l02117"></a>02117         {
<a name="l02118"></a>02118           <a class="code" href="group__DBusList.html#g40abea762d9cb44e5ec6b31b1769dc2e">_dbus_list_remove_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>, link);
<a name="l02119"></a>02119           connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>  -= 1;
<a name="l02120"></a>02120           <span class="keywordflow">return</span> reply;
<a name="l02121"></a>02121         }
<a name="l02122"></a>02122       link = <a class="code" href="group__DBusList.html#gede4ace46d5ee497d75074bfec4490a2">_dbus_list_get_next_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>, link);
<a name="l02123"></a>02123     }
<a name="l02124"></a>02124 
<a name="l02125"></a>02125   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02126"></a>02126 }
<a name="l02127"></a>02127 
<a name="l02128"></a>02128 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02129"></a>02129 connection_timeout_and_complete_all_pending_calls_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02130"></a>02130 {
<a name="l02131"></a>02131    <span class="comment">/* We can't iterate over the hash in the normal way since we'll be</span>
<a name="l02132"></a>02132 <span class="comment">    * dropping the lock for each item. So we restart the</span>
<a name="l02133"></a>02133 <span class="comment">    * iter each time as we drain the hash table.</span>
<a name="l02134"></a>02134 <span class="comment">    */</span>
<a name="l02135"></a>02135    
<a name="l02136"></a>02136    <span class="keywordflow">while</span> (<a class="code" href="group__DBusHashTable.html#gd48297fc27442c19a7c4bd4d1ef9ef77">_dbus_hash_table_get_n_entries</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>) &gt; 0)
<a name="l02137"></a>02137     {
<a name="l02138"></a>02138       <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending;
<a name="l02139"></a>02139       <a class="code" href="structDBusHashIter.html">DBusHashIter</a> iter;
<a name="l02140"></a>02140       
<a name="l02141"></a>02141       <a class="code" href="group__DBusHashTable.html#g1b0e6df8a8617ef0f8f25adfba3acc4c">_dbus_hash_iter_init</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>, &amp;iter);
<a name="l02142"></a>02142       <a class="code" href="group__DBusHashTable.html#g723e61fcc91ca673e90ff872c07ea19c">_dbus_hash_iter_next</a> (&amp;iter);
<a name="l02143"></a>02143        
<a name="l02144"></a>02144       pending = <a class="code" href="group__DBusHashTable.html#g34bf277ee37f919bd00516b5ae4e12b5">_dbus_hash_iter_get_value</a> (&amp;iter);
<a name="l02145"></a>02145       <a class="code" href="group__DBusPendingCallInternals.html#g9d8987da3747604d370ffec2c5e1e10a">_dbus_pending_call_ref_unlocked</a> (pending);
<a name="l02146"></a>02146        
<a name="l02147"></a>02147       <a class="code" href="group__DBusPendingCallInternals.html#g1bc4de7652108d0629522a4e3adffcab">_dbus_pending_call_queue_timeout_error_unlocked</a> (pending, 
<a name="l02148"></a>02148                                                        connection);
<a name="l02149"></a>02149       <a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">_dbus_connection_remove_timeout_unlocked</a> (connection,
<a name="l02150"></a>02150                                                 <a class="code" href="group__DBusPendingCallInternals.html#ga9acac047b61c9a0eaff1977151e9e08">_dbus_pending_call_get_timeout_unlocked</a> (pending));
<a name="l02151"></a>02151       <a class="code" href="group__DBusPendingCallInternals.html#gfea13f8b9977d341e41201c407adea2a">_dbus_pending_call_set_timeout_added_unlocked</a> (pending, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);       
<a name="l02152"></a>02152       <a class="code" href="group__DBusHashTable.html#g0ef12d773a546f070cff91cbf1e8d16e">_dbus_hash_iter_remove_entry</a> (&amp;iter);
<a name="l02153"></a>02153 
<a name="l02154"></a>02154       <a class="code" href="group__DBusPendingCallInternals.html#g26f09beed0dd6323cca0452abf344567">_dbus_pending_call_unref_and_unlock</a> (pending);
<a name="l02155"></a>02155       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02156"></a>02156     }
<a name="l02157"></a>02157   HAVE_LOCK_CHECK (connection);
<a name="l02158"></a>02158 }
<a name="l02159"></a>02159 
<a name="l02160"></a>02160 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02161"></a>02161 complete_pending_call_and_unlock (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l02162"></a>02162                                   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending,
<a name="l02163"></a>02163                                   <a class="code" href="structDBusMessage.html">DBusMessage</a>     *message)
<a name="l02164"></a>02164 {
<a name="l02165"></a>02165   <a class="code" href="group__DBusPendingCallInternals.html#g4b8cc560549160aecd924037a872009d">_dbus_pending_call_set_reply_unlocked</a> (pending, message);
<a name="l02166"></a>02166   <a class="code" href="group__DBusPendingCallInternals.html#g9d8987da3747604d370ffec2c5e1e10a">_dbus_pending_call_ref_unlocked</a> (pending); <span class="comment">/* in case there's no app with a ref held */</span>
<a name="l02167"></a>02167   _dbus_connection_detach_pending_call_and_unlock (connection, pending);
<a name="l02168"></a>02168  
<a name="l02169"></a>02169   <span class="comment">/* Must be called unlocked since it invokes app callback */</span>
<a name="l02170"></a>02170   <a class="code" href="group__DBusPendingCallInternals.html#g6b10d157242e540fd18bd3db733dab5c">_dbus_pending_call_complete</a> (pending);
<a name="l02171"></a>02171   <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l02172"></a>02172 }
<a name="l02173"></a>02173 
<a name="l02174"></a>02174 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02175"></a>02175 check_for_reply_and_update_dispatch_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a>  *connection,
<a name="l02176"></a>02176                                               <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending)
<a name="l02177"></a>02177 {
<a name="l02178"></a>02178   <a class="code" href="structDBusMessage.html">DBusMessage</a> *reply;
<a name="l02179"></a>02179   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l02180"></a>02180 
<a name="l02181"></a>02181   reply = check_for_reply_unlocked (connection, 
<a name="l02182"></a>02182                                     <a class="code" href="group__DBusPendingCallInternals.html#gf5f3df36149bfe55d824eb08d00768fc">_dbus_pending_call_get_reply_serial_unlocked</a> (pending));
<a name="l02183"></a>02183   <span class="keywordflow">if</span> (reply != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02184"></a>02184     {
<a name="l02185"></a>02185       _dbus_verbose (<span class="stringliteral">"%s checked for reply\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l02186"></a>02186 
<a name="l02187"></a>02187       _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block(): got reply\n"</span>);
<a name="l02188"></a>02188 
<a name="l02189"></a>02189       complete_pending_call_and_unlock (connection, pending, reply);
<a name="l02190"></a>02190       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (reply);
<a name="l02191"></a>02191 
<a name="l02192"></a>02192       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02193"></a>02193       status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l02194"></a>02194       _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l02195"></a>02195       <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l02196"></a>02196 
<a name="l02197"></a>02197       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02198"></a>02198     }
<a name="l02199"></a>02199 
<a name="l02200"></a>02200   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02201"></a>02201 }
<a name="l02202"></a>02202 
<a name="l02217"></a>02217 <span class="keywordtype">void</span>
<a name="l02218"></a><a class="code" href="group__DBusConnectionInternals.html#gd5e725e66dc16a411544e25675fb9fba">02218</a> <a class="code" href="group__DBusConnectionInternals.html#gd5e725e66dc16a411544e25675fb9fba">_dbus_connection_block_pending_call</a> (<a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending)
<a name="l02219"></a>02219 {
<a name="l02220"></a>02220   <span class="keywordtype">long</span> start_tv_sec, start_tv_usec;
<a name="l02221"></a>02221   <span class="keywordtype">long</span> end_tv_sec, end_tv_usec;
<a name="l02222"></a>02222   <span class="keywordtype">long</span> tv_sec, tv_usec;
<a name="l02223"></a>02223   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l02224"></a>02224   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l02225"></a>02225   <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> client_serial;
<a name="l02226"></a>02226   <span class="keywordtype">int</span> timeout_milliseconds;
<a name="l02227"></a>02227 
<a name="l02228"></a>02228   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (pending != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02229"></a>02229 
<a name="l02230"></a>02230   <span class="keywordflow">if</span> (<a class="code" href="group__DBusPendingCall.html#g13ebf0d5fce7515eba671f14196ea116">dbus_pending_call_get_completed</a> (pending))
<a name="l02231"></a>02231     <span class="keywordflow">return</span>;
<a name="l02232"></a>02232 
<a name="l02233"></a>02233   <a class="code" href="group__DBusPendingCall.html#g5b10665ce8dfbf23cc2dfb7be1490d4b">dbus_pending_call_ref</a> (pending); <span class="comment">/* necessary because the call could be canceled */</span>
<a name="l02234"></a>02234 
<a name="l02235"></a>02235   connection = <a class="code" href="group__DBusPendingCallInternals.html#g68e5ff616e6a6563d83966c3d88b9b32">_dbus_pending_call_get_connection_and_lock</a> (pending);
<a name="l02236"></a>02236   
<a name="l02237"></a>02237   <span class="comment">/* Flush message queue - note, can affect dispatch status */</span>
<a name="l02238"></a>02238   _dbus_connection_flush_unlocked (connection);
<a name="l02239"></a>02239 
<a name="l02240"></a>02240   client_serial = <a class="code" href="group__DBusPendingCallInternals.html#gf5f3df36149bfe55d824eb08d00768fc">_dbus_pending_call_get_reply_serial_unlocked</a> (pending);
<a name="l02241"></a>02241 
<a name="l02242"></a>02242   <span class="comment">/* note that timeout_milliseconds is limited to a smallish value</span>
<a name="l02243"></a>02243 <span class="comment">   * in _dbus_pending_call_new() so overflows aren't possible</span>
<a name="l02244"></a>02244 <span class="comment">   * below</span>
<a name="l02245"></a>02245 <span class="comment">   */</span>
<a name="l02246"></a>02246   timeout_milliseconds = <a class="code" href="group__DBusTimeout.html#g67ba21b6189438875c6007ee79da5e37">dbus_timeout_get_interval</a> (<a class="code" href="group__DBusPendingCallInternals.html#ga9acac047b61c9a0eaff1977151e9e08">_dbus_pending_call_get_timeout_unlocked</a> (pending));
<a name="l02247"></a>02247   
<a name="l02248"></a>02248   <a class="code" href="group__DBusSysdeps.html#g4e3cbe529fc3e7984ed6553672e085f8">_dbus_get_current_time</a> (&amp;start_tv_sec, &amp;start_tv_usec);
<a name="l02249"></a>02249   end_tv_sec = start_tv_sec + timeout_milliseconds / 1000;
<a name="l02250"></a>02250   end_tv_usec = start_tv_usec + (timeout_milliseconds % 1000) * 1000;
<a name="l02251"></a>02251   end_tv_sec += end_tv_usec / _DBUS_USEC_PER_SECOND;
<a name="l02252"></a>02252   end_tv_usec = end_tv_usec % _DBUS_USEC_PER_SECOND;
<a name="l02253"></a>02253 
<a name="l02254"></a>02254   _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block(): will block %d milliseconds for reply serial %u from %ld sec %ld usec to %ld sec %ld usec\n"</span>,
<a name="l02255"></a>02255                  timeout_milliseconds,
<a name="l02256"></a>02256                  client_serial,
<a name="l02257"></a>02257                  start_tv_sec, start_tv_usec,
<a name="l02258"></a>02258                  end_tv_sec, end_tv_usec);
<a name="l02259"></a>02259 
<a name="l02260"></a>02260   <span class="comment">/* check to see if we already got the data off the socket */</span>
<a name="l02261"></a>02261   <span class="comment">/* from another blocked pending call */</span>
<a name="l02262"></a>02262   <span class="keywordflow">if</span> (check_for_reply_and_update_dispatch_unlocked (connection, pending))
<a name="l02263"></a>02263     <span class="keywordflow">return</span>;
<a name="l02264"></a>02264 
<a name="l02265"></a>02265   <span class="comment">/* Now we wait... */</span>
<a name="l02266"></a>02266   <span class="comment">/* always block at least once as we know we don't have the reply yet */</span>
<a name="l02267"></a>02267   <a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">_dbus_connection_do_iteration_unlocked</a> (connection,
<a name="l02268"></a>02268                                           DBUS_ITERATION_DO_READING |
<a name="l02269"></a>02269                                           DBUS_ITERATION_BLOCK,
<a name="l02270"></a>02270                                           timeout_milliseconds);
<a name="l02271"></a>02271 
<a name="l02272"></a>02272  recheck_status:
<a name="l02273"></a>02273 
<a name="l02274"></a>02274   _dbus_verbose (<span class="stringliteral">"%s top of recheck\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l02275"></a>02275   
<a name="l02276"></a>02276   HAVE_LOCK_CHECK (connection);
<a name="l02277"></a>02277   
<a name="l02278"></a>02278   <span class="comment">/* queue messages and get status */</span>
<a name="l02279"></a>02279 
<a name="l02280"></a>02280   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l02281"></a>02281 
<a name="l02282"></a>02282   <span class="comment">/* the get_completed() is in case a dispatch() while we were blocking</span>
<a name="l02283"></a>02283 <span class="comment">   * got the reply instead of us.</span>
<a name="l02284"></a>02284 <span class="comment">   */</span>
<a name="l02285"></a>02285   <span class="keywordflow">if</span> (<a class="code" href="group__DBusPendingCallInternals.html#g37bef4359b3c29629a57f5fe480690a1">_dbus_pending_call_get_completed_unlocked</a> (pending))
<a name="l02286"></a>02286     {
<a name="l02287"></a>02287       _dbus_verbose (<span class="stringliteral">"Pending call completed by dispatch in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l02288"></a>02288       _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l02289"></a>02289       <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l02290"></a>02290       <span class="keywordflow">return</span>;
<a name="l02291"></a>02291     }
<a name="l02292"></a>02292   
<a name="l02293"></a>02293   <span class="keywordflow">if</span> (status == <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>) {
<a name="l02294"></a>02294     <span class="keywordflow">if</span> (check_for_reply_and_update_dispatch_unlocked (connection, pending))
<a name="l02295"></a>02295       <span class="keywordflow">return</span>;
<a name="l02296"></a>02296   }
<a name="l02297"></a>02297   
<a name="l02298"></a>02298   <a class="code" href="group__DBusSysdeps.html#g4e3cbe529fc3e7984ed6553672e085f8">_dbus_get_current_time</a> (&amp;tv_sec, &amp;tv_usec);
<a name="l02299"></a>02299   
<a name="l02300"></a>02300   <span class="keywordflow">if</span> (!_dbus_connection_get_is_connected_unlocked (connection))
<a name="l02301"></a>02301     {
<a name="l02302"></a>02302       <a class="code" href="structDBusMessage.html">DBusMessage</a> *error_msg;
<a name="l02303"></a>02303 
<a name="l02304"></a>02304       error_msg = generate_local_error_message (client_serial,
<a name="l02305"></a>02305                                                 <a class="code" href="group__DBusProtocol.html#gef6443e0bd8cdcc1606d985a775d07a7">DBUS_ERROR_DISCONNECTED</a>, 
<a name="l02306"></a>02306                                                 <span class="stringliteral">"Connection was disconnected before a reply was received"</span>); 
<a name="l02307"></a>02307 
<a name="l02308"></a>02308       <span class="comment">/* on OOM error_msg is set to NULL */</span>
<a name="l02309"></a>02309       complete_pending_call_and_unlock (connection, pending, error_msg);
<a name="l02310"></a>02310       <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l02311"></a>02311       <span class="keywordflow">return</span>;
<a name="l02312"></a>02312     }
<a name="l02313"></a>02313   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tv_sec &lt; start_tv_sec)
<a name="l02314"></a>02314     _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block(): clock set backward\n"</span>);
<a name="l02315"></a>02315   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (connection-&gt;disconnect_message_link == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02316"></a>02316     _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block(): disconnected\n"</span>);
<a name="l02317"></a>02317   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tv_sec &lt; end_tv_sec ||
<a name="l02318"></a>02318            (tv_sec == end_tv_sec &amp;&amp; tv_usec &lt; end_tv_usec))
<a name="l02319"></a>02319     {
<a name="l02320"></a>02320       timeout_milliseconds = (end_tv_sec - tv_sec) * 1000 +
<a name="l02321"></a>02321         (end_tv_usec - tv_usec) / 1000;
<a name="l02322"></a>02322       _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block(): %d milliseconds remain\n"</span>, timeout_milliseconds);
<a name="l02323"></a>02323       <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (timeout_milliseconds &gt;= 0);
<a name="l02324"></a>02324       
<a name="l02325"></a>02325       <span class="keywordflow">if</span> (status == <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d25af20a035f29cfa67fb8d69fb693b685">DBUS_DISPATCH_NEED_MEMORY</a>)
<a name="l02326"></a>02326         {
<a name="l02327"></a>02327           <span class="comment">/* Try sleeping a bit, as we aren't sure we need to block for reading,</span>
<a name="l02328"></a>02328 <span class="comment">           * we may already have a reply in the buffer and just can't process</span>
<a name="l02329"></a>02329 <span class="comment">           * it.</span>
<a name="l02330"></a>02330 <span class="comment">           */</span>
<a name="l02331"></a>02331           _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block() waiting for more memory\n"</span>);
<a name="l02332"></a>02332 
<a name="l02333"></a>02333           _dbus_memory_pause_based_on_timeout (timeout_milliseconds);
<a name="l02334"></a>02334         }
<a name="l02335"></a>02335       <span class="keywordflow">else</span>
<a name="l02336"></a>02336         {          
<a name="l02337"></a>02337           <span class="comment">/* block again, we don't have the reply buffered yet. */</span>
<a name="l02338"></a>02338           <a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">_dbus_connection_do_iteration_unlocked</a> (connection,
<a name="l02339"></a>02339                                                   DBUS_ITERATION_DO_READING |
<a name="l02340"></a>02340                                                   DBUS_ITERATION_BLOCK,
<a name="l02341"></a>02341                                                   timeout_milliseconds);
<a name="l02342"></a>02342         }
<a name="l02343"></a>02343 
<a name="l02344"></a>02344       <span class="keywordflow">goto</span> recheck_status;
<a name="l02345"></a>02345     }
<a name="l02346"></a>02346 
<a name="l02347"></a>02347   _dbus_verbose (<span class="stringliteral">"dbus_connection_send_with_reply_and_block(): Waited %ld milliseconds and got no reply\n"</span>,
<a name="l02348"></a>02348                  (tv_sec - start_tv_sec) * 1000 + (tv_usec - start_tv_usec) / 1000);
<a name="l02349"></a>02349 
<a name="l02350"></a>02350   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!<a class="code" href="group__DBusPendingCallInternals.html#g37bef4359b3c29629a57f5fe480690a1">_dbus_pending_call_get_completed_unlocked</a> (pending));
<a name="l02351"></a>02351   
<a name="l02352"></a>02352   <span class="comment">/* unlock and call user code */</span>
<a name="l02353"></a>02353   complete_pending_call_and_unlock (connection, pending, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02354"></a>02354 
<a name="l02355"></a>02355   <span class="comment">/* update user code on dispatch status */</span>
<a name="l02356"></a>02356   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02357"></a>02357   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l02358"></a>02358   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l02359"></a>02359   <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l02360"></a>02360 }
<a name="l02361"></a>02361 
<a name="l02398"></a>02398 <a class="code" href="structDBusConnection.html">DBusConnection</a>*
<a name="l02399"></a><a class="code" href="group__DBusConnection.html#gc6bc8680215ed6e3b526903736f4edde">02399</a> <a class="code" href="group__DBusConnection.html#gc6bc8680215ed6e3b526903736f4edde">dbus_connection_open</a> (<span class="keyword">const</span> <span class="keywordtype">char</span>     *address,
<a name="l02400"></a>02400                       <a class="code" href="structDBusError.html">DBusError</a>      *error)
<a name="l02401"></a>02401 {
<a name="l02402"></a>02402   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l02403"></a>02403 
<a name="l02404"></a>02404   _dbus_return_val_if_fail (address != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02405"></a>02405   _dbus_return_val_if_error_is_set (error, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02406"></a>02406 
<a name="l02407"></a>02407   connection = _dbus_connection_open_internal (address,
<a name="l02408"></a>02408                                                <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>,
<a name="l02409"></a>02409                                                error);
<a name="l02410"></a>02410 
<a name="l02411"></a>02411   <span class="keywordflow">return</span> connection;
<a name="l02412"></a>02412 }
<a name="l02413"></a>02413 
<a name="l02441"></a>02441 <a class="code" href="structDBusConnection.html">DBusConnection</a>*
<a name="l02442"></a><a class="code" href="group__DBusConnection.html#gce3add3e44f74a7f60ee2b102264c48d">02442</a> <a class="code" href="group__DBusConnection.html#gce3add3e44f74a7f60ee2b102264c48d">dbus_connection_open_private</a> (<span class="keyword">const</span> <span class="keywordtype">char</span>     *address,
<a name="l02443"></a>02443                               <a class="code" href="structDBusError.html">DBusError</a>      *error)
<a name="l02444"></a>02444 {
<a name="l02445"></a>02445   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l02446"></a>02446 
<a name="l02447"></a>02447   _dbus_return_val_if_fail (address != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02448"></a>02448   _dbus_return_val_if_error_is_set (error, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02449"></a>02449 
<a name="l02450"></a>02450   connection = _dbus_connection_open_internal (address,
<a name="l02451"></a>02451                                                <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l02452"></a>02452                                                error);
<a name="l02453"></a>02453 
<a name="l02454"></a>02454   <span class="keywordflow">return</span> connection;
<a name="l02455"></a>02455 }
<a name="l02456"></a>02456 
<a name="l02463"></a>02463 <a class="code" href="structDBusConnection.html">DBusConnection</a> *
<a name="l02464"></a><a class="code" href="group__DBusConnection.html#gd9a07052fe293b559303efc8546dc9ec">02464</a> <a class="code" href="group__DBusConnection.html#gd9a07052fe293b559303efc8546dc9ec">dbus_connection_ref</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02465"></a>02465 {
<a name="l02466"></a>02466   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02467"></a>02467   _dbus_return_val_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02468"></a>02468   
<a name="l02469"></a>02469   <span class="comment">/* The connection lock is better than the global</span>
<a name="l02470"></a>02470 <span class="comment">   * lock in the atomic increment fallback</span>
<a name="l02471"></a>02471 <span class="comment">   */</span>
<a name="l02472"></a>02472   
<a name="l02473"></a>02473 <span class="preprocessor">#ifdef DBUS_HAVE_ATOMIC_INT</span>
<a name="l02474"></a>02474 <span class="preprocessor"></span>  <a class="code" href="group__DBusSysdeps.html#ge74c3fcf12acaeccdb152ef907de951c">_dbus_atomic_inc</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>);
<a name="l02475"></a>02475 <span class="preprocessor">#else</span>
<a name="l02476"></a>02476 <span class="preprocessor"></span>  <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02477"></a>02477   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l02478"></a>02478 
<a name="l02479"></a>02479   connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> += 1;
<a name="l02480"></a>02480   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02481"></a>02481 <span class="preprocessor">#endif</span>
<a name="l02482"></a>02482 <span class="preprocessor"></span>
<a name="l02483"></a>02483   <span class="keywordflow">return</span> connection;
<a name="l02484"></a>02484 }
<a name="l02485"></a>02485 
<a name="l02486"></a>02486 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02487"></a>02487 free_outgoing_message (<span class="keywordtype">void</span> *element,
<a name="l02488"></a>02488                        <span class="keywordtype">void</span> *data)
<a name="l02489"></a>02489 {
<a name="l02490"></a>02490   <a class="code" href="structDBusMessage.html">DBusMessage</a> *message = element;
<a name="l02491"></a>02491   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection = data;
<a name="l02492"></a>02492 
<a name="l02493"></a>02493   <a class="code" href="group__DBusMessageInternals.html#g5a991994492dfb85c5838b8293ccf0aa">_dbus_message_remove_size_counter</a> (message,
<a name="l02494"></a>02494                                      connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>,
<a name="l02495"></a>02495                                      <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02496"></a>02496   <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l02497"></a>02497 }
<a name="l02498"></a>02498 
<a name="l02499"></a>02499 <span class="comment">/* This is run without the mutex held, but after the last reference</span>
<a name="l02500"></a>02500 <span class="comment"> * to the connection has been dropped we should have no thread-related</span>
<a name="l02501"></a>02501 <span class="comment"> * problems</span>
<a name="l02502"></a>02502 <span class="comment"> */</span>
<a name="l02503"></a>02503 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02504"></a>02504 _dbus_connection_last_unref (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02505"></a>02505 {
<a name="l02506"></a>02506   <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l02507"></a>02507 
<a name="l02508"></a>02508   _dbus_verbose (<span class="stringliteral">"Finalizing connection %p\n"</span>, connection);
<a name="l02509"></a>02509   
<a name="l02510"></a>02510   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l02511"></a>02511   
<a name="l02512"></a>02512   <span class="comment">/* You have to disconnect the connection before unref:ing it. Otherwise</span>
<a name="l02513"></a>02513 <span class="comment">   * you won't get the disconnected message.</span>
<a name="l02514"></a>02514 <span class="comment">   */</span>
<a name="l02515"></a>02515   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!<a class="code" href="group__DBusTransport.html#gceee4b098b0177870ad934daad90a9c6">_dbus_transport_get_is_connected</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>));
<a name="l02516"></a>02516   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02517"></a>02517   
<a name="l02518"></a>02518   <span class="comment">/* ---- We're going to call various application callbacks here, hope it doesn't break anything... */</span>
<a name="l02519"></a>02519   <a class="code" href="group__DBusObjectTree.html#g1c51e43233ce0f3855c128f2555317eb">_dbus_object_tree_free_all_unlocked</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>);
<a name="l02520"></a>02520   
<a name="l02521"></a>02521   <a class="code" href="group__DBusConnection.html#gdf6557742f6b8b0daefc609dfd542c48">dbus_connection_set_dispatch_status_function</a> (connection, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02522"></a>02522   <a class="code" href="group__DBusConnection.html#ge4b62a3933f61445c7a242966c6d0fa6">dbus_connection_set_wakeup_main_function</a> (connection, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02523"></a>02523   <a class="code" href="group__DBusConnection.html#gd5b08fdd0cf5f79ad4dc9243acfa181c">dbus_connection_set_unix_user_function</a> (connection, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02524"></a>02524   
<a name="l02525"></a>02525   <a class="code" href="group__DBusWatchInternals.html#gc3f75c0da2c8c51e8708f45dd27f9e2d">_dbus_watch_list_free</a> (connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a>);
<a name="l02526"></a>02526   connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02527"></a>02527   
<a name="l02528"></a>02528   <a class="code" href="group__DBusTimeoutInternals.html#g1b399ef2d7f128e59bb32dbb5b590e1b">_dbus_timeout_list_free</a> (connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a>);
<a name="l02529"></a>02529   connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02530"></a>02530 
<a name="l02531"></a>02531   <a class="code" href="group__DBusDataSlot.html#gbc399733376c462c3010271a2d431e73">_dbus_data_slot_list_free</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">slot_list</a>);
<a name="l02532"></a>02532   
<a name="l02533"></a>02533   link = <a class="code" href="group__DBusList.html#g1e26ce4fb4acb50593bd5ed2f4eeb3ae">_dbus_list_get_first_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>);
<a name="l02534"></a>02534   <span class="keywordflow">while</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02535"></a>02535     {
<a name="l02536"></a>02536       <a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *filter = link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l02537"></a>02537       <a class="code" href="structDBusList.html">DBusList</a> *next = <a class="code" href="group__DBusList.html#gede4ace46d5ee497d75074bfec4490a2">_dbus_list_get_next_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, link);
<a name="l02538"></a>02538 
<a name="l02539"></a>02539       filter-&gt;<a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02540"></a>02540       _dbus_message_filter_unref (filter); <span class="comment">/* calls app callback */</span>
<a name="l02541"></a>02541       link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02542"></a>02542       
<a name="l02543"></a>02543       link = next;
<a name="l02544"></a>02544     }
<a name="l02545"></a>02545   <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>);
<a name="l02546"></a>02546   
<a name="l02547"></a>02547   <span class="comment">/* ---- Done with stuff that invokes application callbacks */</span>
<a name="l02548"></a>02548 
<a name="l02549"></a>02549   <a class="code" href="group__DBusObjectTree.html#g7639e273ab160c422a7cef0cda60ded5">_dbus_object_tree_unref</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>);  
<a name="l02550"></a>02550 
<a name="l02551"></a>02551   <a class="code" href="group__DBusHashTable.html#g96b777e00764b44e0f3216fd8478f5a9">_dbus_hash_table_unref</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>);
<a name="l02552"></a>02552   connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02553"></a>02553   
<a name="l02554"></a>02554   <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>);
<a name="l02555"></a>02555   
<a name="l02556"></a>02556   <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>,
<a name="l02557"></a>02557                       free_outgoing_message,
<a name="l02558"></a>02558                       connection);
<a name="l02559"></a>02559   <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>);
<a name="l02560"></a>02560   
<a name="l02561"></a>02561   <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l02562"></a>02562                       (<a class="code" href="group__DBusInternalsUtils.html#gadf9d45082dd1c9f59d8420d13492669">DBusForeachFunction</a>) <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a>,
<a name="l02563"></a>02563                       <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02564"></a>02564   <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l02565"></a>02565 
<a name="l02566"></a>02566   <a class="code" href="group__DBusResources.html#g48d9b53d1a395ab3c4f1846ca569ef3f">_dbus_counter_unref</a> (connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>);
<a name="l02567"></a>02567 
<a name="l02568"></a>02568   <a class="code" href="group__DBusTransport.html#gb7c53c32a2320c81aae8ce4345762e73">_dbus_transport_unref</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l02569"></a>02569 
<a name="l02570"></a>02570   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>)
<a name="l02571"></a>02571     {
<a name="l02572"></a>02572       <a class="code" href="structDBusMessage.html">DBusMessage</a> *message = connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l02573"></a>02573       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l02574"></a>02574       <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>);
<a name="l02575"></a>02575     }
<a name="l02576"></a>02576 
<a name="l02577"></a>02577   <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>);
<a name="l02578"></a>02578   
<a name="l02579"></a>02579   <a class="code" href="group__DBusThreadsInternals.html#g29444a34b569fca22fac48067832aacd">_dbus_condvar_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>);
<a name="l02580"></a>02580   <a class="code" href="group__DBusThreadsInternals.html#g29444a34b569fca22fac48067832aacd">_dbus_condvar_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>);
<a name="l02581"></a>02581 
<a name="l02582"></a>02582   <a class="code" href="group__DBusThreadsInternals.html#gfd7f94bf0c265660749ffa690e76248a">_dbus_mutex_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l02583"></a>02583   <a class="code" href="group__DBusThreadsInternals.html#gfd7f94bf0c265660749ffa690e76248a">_dbus_mutex_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l02584"></a>02584 
<a name="l02585"></a>02585   <a class="code" href="group__DBusThreadsInternals.html#gfd7f94bf0c265660749ffa690e76248a">_dbus_mutex_free_at_location</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>);
<a name="l02586"></a>02586   
<a name="l02587"></a>02587   <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (connection);
<a name="l02588"></a>02588 }
<a name="l02589"></a>02589 
<a name="l02609"></a>02609 <span class="keywordtype">void</span>
<a name="l02610"></a><a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">02610</a> <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02611"></a>02611 {
<a name="l02612"></a>02612   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> last_unref;
<a name="l02613"></a>02613 
<a name="l02614"></a>02614   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02615"></a>02615   _dbus_return_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>);
<a name="l02616"></a>02616   
<a name="l02617"></a>02617   <span class="comment">/* The connection lock is better than the global</span>
<a name="l02618"></a>02618 <span class="comment">   * lock in the atomic increment fallback</span>
<a name="l02619"></a>02619 <span class="comment">   */</span>
<a name="l02620"></a>02620   
<a name="l02621"></a>02621 <span class="preprocessor">#ifdef DBUS_HAVE_ATOMIC_INT</span>
<a name="l02622"></a>02622 <span class="preprocessor"></span>  last_unref = (<a class="code" href="group__DBusSysdeps.html#g3c50a069f795dceeb9172fe2b517bbdc">_dbus_atomic_dec</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>) == 1);
<a name="l02623"></a>02623 <span class="preprocessor">#else</span>
<a name="l02624"></a>02624 <span class="preprocessor"></span>  <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02625"></a>02625   
<a name="l02626"></a>02626   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> &gt; 0);
<a name="l02627"></a>02627 
<a name="l02628"></a>02628   connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> -= 1;
<a name="l02629"></a>02629   last_unref = (connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l02630"></a>02630 
<a name="l02631"></a>02631 <span class="preprocessor">#if 0</span>
<a name="l02632"></a>02632 <span class="preprocessor"></span>  printf (<span class="stringliteral">"unref() connection %p count = %d\n"</span>, connection, connection-&gt;<a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a>);
<a name="l02633"></a>02633 <span class="preprocessor">#endif</span>
<a name="l02634"></a>02634 <span class="preprocessor"></span>  
<a name="l02635"></a>02635   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02636"></a>02636 <span class="preprocessor">#endif</span>
<a name="l02637"></a>02637 <span class="preprocessor"></span>  
<a name="l02638"></a>02638   <span class="keywordflow">if</span> (last_unref)
<a name="l02639"></a>02639     {
<a name="l02640"></a>02640 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l02641"></a>02641 <span class="preprocessor"></span>      <span class="keywordflow">if</span> (<a class="code" href="group__DBusTransport.html#gceee4b098b0177870ad934daad90a9c6">_dbus_transport_get_is_connected</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>))
<a name="l02642"></a>02642         {
<a name="l02643"></a>02643           <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"The last reference on a connection was dropped without closing the connection. This is a bug in an application. See dbus_connection_unref() documentation for details.\n%s"</span>,
<a name="l02644"></a>02644                                    connection-&gt;<a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a> ?
<a name="l02645"></a>02645                                    <span class="stringliteral">"Most likely, the application called unref() too many times and removed a reference belonging to libdbus, since this is a shared connection.\n"</span> : 
<a name="l02646"></a>02646                                     <span class="stringliteral">"Most likely, the application was supposed to call dbus_connection_close(), since this is a private connection.\n"</span>);
<a name="l02647"></a>02647           <span class="keywordflow">return</span>;
<a name="l02648"></a>02648         }
<a name="l02649"></a>02649 <span class="preprocessor">#endif</span>
<a name="l02650"></a>02650 <span class="preprocessor"></span>      _dbus_connection_last_unref (connection);
<a name="l02651"></a>02651     }
<a name="l02652"></a>02652 }
<a name="l02653"></a>02653 
<a name="l02654"></a>02654 <span class="comment">/*</span>
<a name="l02655"></a>02655 <span class="comment"> * Note that the transport can disconnect itself (other end drops us)</span>
<a name="l02656"></a>02656 <span class="comment"> * and in that case this function never runs. So this function must</span>
<a name="l02657"></a>02657 <span class="comment"> * not do anything more than disconnect the transport and update the</span>
<a name="l02658"></a>02658 <span class="comment"> * dispatch status.</span>
<a name="l02659"></a>02659 <span class="comment"> * </span>
<a name="l02660"></a>02660 <span class="comment"> * If the transport self-disconnects, then we assume someone will</span>
<a name="l02661"></a>02661 <span class="comment"> * dispatch the connection to cause the dispatch status update.</span>
<a name="l02662"></a>02662 <span class="comment"> */</span>
<a name="l02663"></a>02663 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l02664"></a>02664 _dbus_connection_close_possibly_shared_and_unlock (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02665"></a>02665 {
<a name="l02666"></a>02666   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l02667"></a>02667 
<a name="l02668"></a>02668   HAVE_LOCK_CHECK (connection);
<a name="l02669"></a>02669   
<a name="l02670"></a>02670   _dbus_verbose (<span class="stringliteral">"Disconnecting %p\n"</span>, connection);
<a name="l02671"></a>02671 
<a name="l02672"></a>02672   <span class="comment">/* We need to ref because update_dispatch_status_and_unlock will unref</span>
<a name="l02673"></a>02673 <span class="comment">   * the connection if it was shared and libdbus was the only remaining</span>
<a name="l02674"></a>02674 <span class="comment">   * refcount holder.</span>
<a name="l02675"></a>02675 <span class="comment">   */</span>
<a name="l02676"></a>02676   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l02677"></a>02677   
<a name="l02678"></a>02678   <a class="code" href="group__DBusTransport.html#g78444dd8f6c6d6b429433ad81c3e318a">_dbus_transport_disconnect</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l02679"></a>02679 
<a name="l02680"></a>02680   <span class="comment">/* This has the side effect of queuing the disconnect message link</span>
<a name="l02681"></a>02681 <span class="comment">   * (unless we don't have enough memory, possibly, so don't assert it).</span>
<a name="l02682"></a>02682 <span class="comment">   * After the disconnect message link is queued, dbus_bus_get/dbus_connection_open</span>
<a name="l02683"></a>02683 <span class="comment">   * should never again return the newly-disconnected connection.</span>
<a name="l02684"></a>02684 <span class="comment">   *</span>
<a name="l02685"></a>02685 <span class="comment">   * However, we only unref the shared connection and exit_on_disconnect when</span>
<a name="l02686"></a>02686 <span class="comment">   * the disconnect message reaches the head of the message queue,</span>
<a name="l02687"></a>02687 <span class="comment">   * NOT when it's first queued.</span>
<a name="l02688"></a>02688 <span class="comment">   */</span>
<a name="l02689"></a>02689   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l02690"></a>02690 
<a name="l02691"></a>02691   <span class="comment">/* This calls out to user code */</span>
<a name="l02692"></a>02692   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l02693"></a>02693 
<a name="l02694"></a>02694   <span class="comment">/* Could also call out to user code */</span>
<a name="l02695"></a>02695   <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l02696"></a>02696 }
<a name="l02697"></a>02697 
<a name="l02740"></a>02740 <span class="keywordtype">void</span>
<a name="l02741"></a><a class="code" href="group__DBusConnection.html#ge130c33da29477897d362ab89f068191">02741</a> <a class="code" href="group__DBusConnection.html#ge130c33da29477897d362ab89f068191">dbus_connection_close</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02742"></a>02742 {
<a name="l02743"></a>02743   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02744"></a>02744   _dbus_return_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#49516d636e8a63e1e05e2ab2ba5adcb8">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>);
<a name="l02745"></a>02745 
<a name="l02746"></a>02746   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02747"></a>02747 
<a name="l02748"></a>02748 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l02749"></a>02749 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#ae47138b9b2494b65072ff300d631aa8">shareable</a>)
<a name="l02750"></a>02750     {
<a name="l02751"></a>02751       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02752"></a>02752 
<a name="l02753"></a>02753       <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Applications must not close shared connections - see dbus_connection_close() docs. This is a bug in the application.\n"</span>);
<a name="l02754"></a>02754       <span class="keywordflow">return</span>;
<a name="l02755"></a>02755     }
<a name="l02756"></a>02756 <span class="preprocessor">#endif</span>
<a name="l02757"></a>02757 <span class="preprocessor"></span>  
<a name="l02758"></a>02758   _dbus_connection_close_possibly_shared_and_unlock (connection);
<a name="l02759"></a>02759 }
<a name="l02760"></a>02760 
<a name="l02761"></a>02761 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02762"></a>02762 _dbus_connection_get_is_connected_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02763"></a>02763 {
<a name="l02764"></a>02764   HAVE_LOCK_CHECK (connection);
<a name="l02765"></a>02765   <span class="keywordflow">return</span> <a class="code" href="group__DBusTransport.html#gceee4b098b0177870ad934daad90a9c6">_dbus_transport_get_is_connected</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l02766"></a>02766 }
<a name="l02767"></a>02767 
<a name="l02781"></a>02781 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02782"></a><a class="code" href="group__DBusConnection.html#g9a34c73c6e98ac73b5cdaf60598223f8">02782</a> <a class="code" href="group__DBusConnection.html#g9a34c73c6e98ac73b5cdaf60598223f8">dbus_connection_get_is_connected</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02783"></a>02783 {
<a name="l02784"></a>02784   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> res;
<a name="l02785"></a>02785 
<a name="l02786"></a>02786   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02787"></a>02787   
<a name="l02788"></a>02788   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02789"></a>02789   res = _dbus_connection_get_is_connected_unlocked (connection);
<a name="l02790"></a>02790   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02791"></a>02791   
<a name="l02792"></a>02792   <span class="keywordflow">return</span> res;
<a name="l02793"></a>02793 }
<a name="l02794"></a>02794 
<a name="l02803"></a>02803 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02804"></a><a class="code" href="group__DBusConnection.html#g76c4edeeed595863b6682c410e004bf5">02804</a> <a class="code" href="group__DBusConnection.html#g76c4edeeed595863b6682c410e004bf5">dbus_connection_get_is_authenticated</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02805"></a>02805 {
<a name="l02806"></a>02806   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> res;
<a name="l02807"></a>02807 
<a name="l02808"></a>02808   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02809"></a>02809   
<a name="l02810"></a>02810   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02811"></a>02811   res = <a class="code" href="group__DBusTransport.html#g251ff6d644e1dc6d46c58705e6dcc787">_dbus_transport_get_is_authenticated</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l02812"></a>02812   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02813"></a>02813   
<a name="l02814"></a>02814   <span class="keywordflow">return</span> res;
<a name="l02815"></a>02815 }
<a name="l02816"></a>02816 
<a name="l02837"></a>02837 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02838"></a><a class="code" href="group__DBusConnection.html#g2a3361017d88d0c6ff5dd5ec577e28c7">02838</a> <a class="code" href="group__DBusConnection.html#g2a3361017d88d0c6ff5dd5ec577e28c7">dbus_connection_get_is_anonymous</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02839"></a>02839 {
<a name="l02840"></a>02840   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> res;
<a name="l02841"></a>02841 
<a name="l02842"></a>02842   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02843"></a>02843   
<a name="l02844"></a>02844   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02845"></a>02845   res = <a class="code" href="group__DBusTransport.html#gf0588dd4a6d1c556dd885d4c67622399">_dbus_transport_get_is_anonymous</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l02846"></a>02846   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02847"></a>02847   
<a name="l02848"></a>02848   <span class="keywordflow">return</span> res;
<a name="l02849"></a>02849 }
<a name="l02850"></a>02850 
<a name="l02882"></a>02882 <span class="keywordtype">char</span>*
<a name="l02883"></a><a class="code" href="group__DBusConnection.html#g6fed11dcbcd1c9a6f053b04ddafb402c">02883</a> <a class="code" href="group__DBusConnection.html#g6fed11dcbcd1c9a6f053b04ddafb402c">dbus_connection_get_server_id</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02884"></a>02884 {
<a name="l02885"></a>02885   <span class="keywordtype">char</span> *id;
<a name="l02886"></a>02886 
<a name="l02887"></a>02887   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02888"></a>02888   
<a name="l02889"></a>02889   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02890"></a>02890   <span class="keywordtype">id</span> = <a class="code" href="group__DBusInternalsUtils.html#g9d00d77f6595b9d7ac1baf59d44bf58c">_dbus_strdup</a> (<a class="code" href="group__DBusTransport.html#g920abde00e77a970330fa3fc552fe7ea">_dbus_transport_get_server_id</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>));
<a name="l02891"></a>02891   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02892"></a>02892   
<a name="l02893"></a>02893   <span class="keywordflow">return</span> id;
<a name="l02894"></a>02894 }
<a name="l02895"></a>02895 
<a name="l02909"></a>02909 <span class="keywordtype">void</span>
<a name="l02910"></a><a class="code" href="group__DBusConnection.html#g0d3f6cc49cf2d9135f44e4490688ebe5">02910</a> <a class="code" href="group__DBusConnection.html#g0d3f6cc49cf2d9135f44e4490688ebe5">dbus_connection_set_exit_on_disconnect</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l02911"></a>02911                                         <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>     exit_on_disconnect)
<a name="l02912"></a>02912 {
<a name="l02913"></a>02913   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02914"></a>02914 
<a name="l02915"></a>02915   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02916"></a>02916   connection-&gt;<a class="code" href="structDBusConnection.html#2a9f22339f90157f308a532462218404">exit_on_disconnect</a> = exit_on_disconnect != <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02917"></a>02917   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02918"></a>02918 }
<a name="l02919"></a>02919 
<a name="l02929"></a>02929 <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a>*
<a name="l02930"></a><a class="code" href="group__DBusConnection.html#gd7d9bf94b236b007ddb767b915e86174">02930</a> <a class="code" href="group__DBusConnection.html#gd7d9bf94b236b007ddb767b915e86174">dbus_connection_preallocate_send</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l02931"></a>02931 {
<a name="l02932"></a>02932   <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated;
<a name="l02933"></a>02933 
<a name="l02934"></a>02934   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02935"></a>02935 
<a name="l02936"></a>02936   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02937"></a>02937   
<a name="l02938"></a>02938   preallocated =
<a name="l02939"></a>02939     _dbus_connection_preallocate_send_unlocked (connection);
<a name="l02940"></a>02940 
<a name="l02941"></a>02941   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l02942"></a>02942 
<a name="l02943"></a>02943   <span class="keywordflow">return</span> preallocated;
<a name="l02944"></a>02944 }
<a name="l02945"></a>02945 
<a name="l02955"></a>02955 <span class="keywordtype">void</span>
<a name="l02956"></a><a class="code" href="group__DBusConnection.html#g1f086d1729058be17ab9d9888cf5283b">02956</a> <a class="code" href="group__DBusConnection.html#g1f086d1729058be17ab9d9888cf5283b">dbus_connection_free_preallocated_send</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>       *connection,
<a name="l02957"></a>02957                                         <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated)
<a name="l02958"></a>02958 {
<a name="l02959"></a>02959   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02960"></a>02960   _dbus_return_if_fail (preallocated != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);  
<a name="l02961"></a>02961   _dbus_return_if_fail (connection == preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#465af3647772c89500df0b46f43d035b">connection</a>);
<a name="l02962"></a>02962 
<a name="l02963"></a>02963   <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>);
<a name="l02964"></a>02964   <a class="code" href="group__DBusResources.html#g48d9b53d1a395ab3c4f1846ca569ef3f">_dbus_counter_unref</a> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l02965"></a>02965   <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>);
<a name="l02966"></a>02966   <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (preallocated);
<a name="l02967"></a>02967 }
<a name="l02968"></a>02968 
<a name="l02981"></a>02981 <span class="keywordtype">void</span>
<a name="l02982"></a><a class="code" href="group__DBusConnection.html#g5fefd84c604709d4d9addf5053292843">02982</a> <a class="code" href="group__DBusConnection.html#g5fefd84c604709d4d9addf5053292843">dbus_connection_send_preallocated</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>       *connection,
<a name="l02983"></a>02983                                    <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated,
<a name="l02984"></a>02984                                    <a class="code" href="structDBusMessage.html">DBusMessage</a>          *message,
<a name="l02985"></a>02985                                    <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>        *client_serial)
<a name="l02986"></a>02986 {
<a name="l02987"></a>02987   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02988"></a>02988   _dbus_return_if_fail (preallocated != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02989"></a>02989   _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02990"></a>02990   _dbus_return_if_fail (preallocated-&gt;<a class="code" href="structDBusPreallocatedSend.html#465af3647772c89500df0b46f43d035b">connection</a> == connection);
<a name="l02991"></a>02991   _dbus_return_if_fail (<a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message) != <a class="code" href="group__DBusProtocol.html#g09416afd76b65139eddd31e1085d9ebf">DBUS_MESSAGE_TYPE_METHOD_CALL</a> ||
<a name="l02992"></a>02992                         <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02993"></a>02993   _dbus_return_if_fail (<a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message) != <a class="code" href="group__DBusProtocol.html#g728d893ff0c00e126517ba39835220a5">DBUS_MESSAGE_TYPE_SIGNAL</a> ||
<a name="l02994"></a>02994                         (<a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> &amp;&amp;
<a name="l02995"></a>02995                          <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>));
<a name="l02996"></a>02996   
<a name="l02997"></a>02997   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l02998"></a>02998   _dbus_connection_send_preallocated_and_unlock (connection,
<a name="l02999"></a>02999                                                  preallocated,
<a name="l03000"></a>03000                                                  message, client_serial);
<a name="l03001"></a>03001 }
<a name="l03002"></a>03002 
<a name="l03003"></a>03003 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03004"></a>03004 _dbus_connection_send_unlocked_no_update (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03005"></a>03005                                           <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message,
<a name="l03006"></a>03006                                           <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>  *client_serial)
<a name="l03007"></a>03007 {
<a name="l03008"></a>03008   <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated;
<a name="l03009"></a>03009 
<a name="l03010"></a>03010   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03011"></a>03011   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03012"></a>03012   
<a name="l03013"></a>03013   preallocated = _dbus_connection_preallocate_send_unlocked (connection);
<a name="l03014"></a>03014   <span class="keywordflow">if</span> (preallocated == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03015"></a>03015     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03016"></a>03016 
<a name="l03017"></a>03017   _dbus_connection_send_preallocated_unlocked_no_update (connection,
<a name="l03018"></a>03018                                                          preallocated,
<a name="l03019"></a>03019                                                          message,
<a name="l03020"></a>03020                                                          client_serial);
<a name="l03021"></a>03021   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03022"></a>03022 }
<a name="l03023"></a>03023 
<a name="l03045"></a>03045 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03046"></a><a class="code" href="group__DBusConnection.html#g579fe70c804800df3786e50319521970">03046</a> <a class="code" href="group__DBusConnection.html#g579fe70c804800df3786e50319521970">dbus_connection_send</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03047"></a>03047                       <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message,
<a name="l03048"></a>03048                       <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>  *serial)
<a name="l03049"></a>03049 {
<a name="l03050"></a>03050   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03051"></a>03051   _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03052"></a>03052 
<a name="l03053"></a>03053   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03054"></a>03054 
<a name="l03055"></a>03055   <span class="keywordflow">return</span> <a class="code" href="group__DBusConnectionInternals.html#g2974eb1c261305fafc635e14fc575d03">_dbus_connection_send_and_unlock</a> (connection,
<a name="l03056"></a>03056                                            message,
<a name="l03057"></a>03057                                            serial);
<a name="l03058"></a>03058 }
<a name="l03059"></a>03059 
<a name="l03060"></a>03060 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03061"></a>03061 reply_handler_timeout (<span class="keywordtype">void</span> *data)
<a name="l03062"></a>03062 {
<a name="l03063"></a>03063   <a class="code" href="structDBusConnection.html">DBusConnection</a> *connection;
<a name="l03064"></a>03064   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03065"></a>03065   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending = data;
<a name="l03066"></a>03066 
<a name="l03067"></a>03067   connection = <a class="code" href="group__DBusPendingCallInternals.html#g68e5ff616e6a6563d83966c3d88b9b32">_dbus_pending_call_get_connection_and_lock</a> (pending);
<a name="l03068"></a>03068 
<a name="l03069"></a>03069   <a class="code" href="group__DBusPendingCallInternals.html#g1bc4de7652108d0629522a4e3adffcab">_dbus_pending_call_queue_timeout_error_unlocked</a> (pending, 
<a name="l03070"></a>03070                                                    connection);
<a name="l03071"></a>03071   <a class="code" href="group__DBusConnectionInternals.html#gbaa6d26f6eca30782904af1ceb703bd1">_dbus_connection_remove_timeout_unlocked</a> (connection,
<a name="l03072"></a>03072                                             <a class="code" href="group__DBusPendingCallInternals.html#ga9acac047b61c9a0eaff1977151e9e08">_dbus_pending_call_get_timeout_unlocked</a> (pending));
<a name="l03073"></a>03073   <a class="code" href="group__DBusPendingCallInternals.html#gfea13f8b9977d341e41201c407adea2a">_dbus_pending_call_set_timeout_added_unlocked</a> (pending, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03074"></a>03074 
<a name="l03075"></a>03075   _dbus_verbose (<span class="stringliteral">"%s middle\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03076"></a>03076   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l03077"></a>03077 
<a name="l03078"></a>03078   <span class="comment">/* Unlocks, and calls out to user code */</span>
<a name="l03079"></a>03079   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l03080"></a>03080   
<a name="l03081"></a>03081   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03082"></a>03082 }
<a name="l03083"></a>03083 
<a name="l03121"></a>03121 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03122"></a><a class="code" href="group__DBusConnection.html#g8ffe6999b791b68ef959d39144632bfb">03122</a> <a class="code" href="group__DBusConnection.html#g8ffe6999b791b68ef959d39144632bfb">dbus_connection_send_with_reply</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection,
<a name="l03123"></a>03123                                  <a class="code" href="structDBusMessage.html">DBusMessage</a>        *message,
<a name="l03124"></a>03124                                  <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a>   **pending_return,
<a name="l03125"></a>03125                                  <span class="keywordtype">int</span>                 timeout_milliseconds)
<a name="l03126"></a>03126 {
<a name="l03127"></a>03127   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending;
<a name="l03128"></a>03128   <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> serial = -1;
<a name="l03129"></a>03129   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03130"></a>03130 
<a name="l03131"></a>03131   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03132"></a>03132   _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03133"></a>03133   _dbus_return_val_if_fail (timeout_milliseconds &gt;= 0 || timeout_milliseconds == -1, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03134"></a>03134 
<a name="l03135"></a>03135   <span class="keywordflow">if</span> (pending_return)
<a name="l03136"></a>03136     *pending_return = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03137"></a>03137 
<a name="l03138"></a>03138   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03139"></a>03139 
<a name="l03140"></a>03140    <span class="keywordflow">if</span> (!_dbus_connection_get_is_connected_unlocked (connection))
<a name="l03141"></a>03141     {
<a name="l03142"></a>03142       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l03143"></a>03143 
<a name="l03144"></a>03144       *pending_return = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03145"></a>03145 
<a name="l03146"></a>03146       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03147"></a>03147     }
<a name="l03148"></a>03148 
<a name="l03149"></a>03149   pending = <a class="code" href="group__DBusPendingCallInternals.html#g3f2300d7a768783bc2fae0991bcc55df">_dbus_pending_call_new_unlocked</a> (connection,
<a name="l03150"></a>03150                                              timeout_milliseconds,
<a name="l03151"></a>03151                                              reply_handler_timeout);
<a name="l03152"></a>03152 
<a name="l03153"></a>03153   <span class="keywordflow">if</span> (pending == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03154"></a>03154     {
<a name="l03155"></a>03155       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l03156"></a>03156       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03157"></a>03157     }
<a name="l03158"></a>03158 
<a name="l03159"></a>03159   <span class="comment">/* Assign a serial to the message */</span>
<a name="l03160"></a>03160   serial = <a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (message);
<a name="l03161"></a>03161   <span class="keywordflow">if</span> (serial == 0)
<a name="l03162"></a>03162     {
<a name="l03163"></a>03163       serial = _dbus_connection_get_next_client_serial (connection);
<a name="l03164"></a>03164       <a class="code" href="group__DBusMessageInternals.html#g0d9af43afd808b3543ac43b22e731508">_dbus_message_set_serial</a> (message, serial);
<a name="l03165"></a>03165     }
<a name="l03166"></a>03166 
<a name="l03167"></a>03167   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusPendingCallInternals.html#g9901fc4c5fd2db9bf1ce2dcc9abf55fc">_dbus_pending_call_set_timeout_error_unlocked</a> (pending, message, serial))
<a name="l03168"></a>03168     <span class="keywordflow">goto</span> error;
<a name="l03169"></a>03169     
<a name="l03170"></a>03170   <span class="comment">/* Insert the serial in the pending replies hash;</span>
<a name="l03171"></a>03171 <span class="comment">   * hash takes a refcount on DBusPendingCall.</span>
<a name="l03172"></a>03172 <span class="comment">   * Also, add the timeout.</span>
<a name="l03173"></a>03173 <span class="comment">   */</span>
<a name="l03174"></a>03174   <span class="keywordflow">if</span> (!_dbus_connection_attach_pending_call_unlocked (connection,
<a name="l03175"></a>03175                                                       pending))
<a name="l03176"></a>03176     <span class="keywordflow">goto</span> error;
<a name="l03177"></a>03177  
<a name="l03178"></a>03178   <span class="keywordflow">if</span> (!_dbus_connection_send_unlocked_no_update (connection, message, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l03179"></a>03179     {
<a name="l03180"></a>03180       _dbus_connection_detach_pending_call_and_unlock (connection,
<a name="l03181"></a>03181                                                        pending);
<a name="l03182"></a>03182       <span class="keywordflow">goto</span> error_unlocked;
<a name="l03183"></a>03183     }
<a name="l03184"></a>03184 
<a name="l03185"></a>03185   <span class="keywordflow">if</span> (pending_return)
<a name="l03186"></a>03186     *pending_return = pending; <span class="comment">/* hand off refcount */</span>
<a name="l03187"></a>03187   <span class="keywordflow">else</span>
<a name="l03188"></a>03188     {
<a name="l03189"></a>03189       _dbus_connection_detach_pending_call_unlocked (connection, pending);
<a name="l03190"></a>03190       <span class="comment">/* we still have a ref to the pending call in this case, we unref</span>
<a name="l03191"></a>03191 <span class="comment">       * after unlocking, below</span>
<a name="l03192"></a>03192 <span class="comment">       */</span>
<a name="l03193"></a>03193     }
<a name="l03194"></a>03194 
<a name="l03195"></a>03195   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l03196"></a>03196 
<a name="l03197"></a>03197   <span class="comment">/* this calls out to user code */</span>
<a name="l03198"></a>03198   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l03199"></a>03199 
<a name="l03200"></a>03200   <span class="keywordflow">if</span> (pending_return == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03201"></a>03201     <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l03202"></a>03202   
<a name="l03203"></a>03203   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03204"></a>03204 
<a name="l03205"></a>03205  error:
<a name="l03206"></a>03206   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l03207"></a>03207  error_unlocked:
<a name="l03208"></a>03208   <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l03209"></a>03209   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03210"></a>03210 }
<a name="l03211"></a>03211 
<a name="l03242"></a>03242 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l03243"></a><a class="code" href="group__DBusConnection.html#g8f6d7fcce1ec614bf5608231da688cb2">03243</a> <a class="code" href="group__DBusConnection.html#g8f6d7fcce1ec614bf5608231da688cb2">dbus_connection_send_with_reply_and_block</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>     *connection,
<a name="l03244"></a>03244                                            <a class="code" href="structDBusMessage.html">DBusMessage</a>        *message,
<a name="l03245"></a>03245                                            <span class="keywordtype">int</span>                 timeout_milliseconds,
<a name="l03246"></a>03246                                            <a class="code" href="structDBusError.html">DBusError</a>          *error)
<a name="l03247"></a>03247 {
<a name="l03248"></a>03248   <a class="code" href="structDBusMessage.html">DBusMessage</a> *reply;
<a name="l03249"></a>03249   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending;
<a name="l03250"></a>03250   
<a name="l03251"></a>03251   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03252"></a>03252   _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03253"></a>03253   _dbus_return_val_if_fail (timeout_milliseconds &gt;= 0 || timeout_milliseconds == -1, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03254"></a>03254   _dbus_return_val_if_error_is_set (error, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03255"></a>03255   
<a name="l03256"></a>03256   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusConnection.html#g8ffe6999b791b68ef959d39144632bfb">dbus_connection_send_with_reply</a> (connection, message,
<a name="l03257"></a>03257                                         &amp;pending, timeout_milliseconds))
<a name="l03258"></a>03258     {
<a name="l03259"></a>03259       _DBUS_SET_OOM (error);
<a name="l03260"></a>03260       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03261"></a>03261     }
<a name="l03262"></a>03262 
<a name="l03263"></a>03263   <span class="keywordflow">if</span> (pending == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03264"></a>03264     {
<a name="l03265"></a>03265       <a class="code" href="group__DBusErrors.html#g4e1b4b297468006781a957129ad9cf00">dbus_set_error</a> (error, <a class="code" href="group__DBusProtocol.html#gef6443e0bd8cdcc1606d985a775d07a7">DBUS_ERROR_DISCONNECTED</a>, <span class="stringliteral">"Connection is closed"</span>);
<a name="l03266"></a>03266       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03267"></a>03267     }
<a name="l03268"></a>03268   
<a name="l03269"></a>03269   <a class="code" href="group__DBusPendingCall.html#g35cdbc7ac2437cc252a1f32129d2bf6a">dbus_pending_call_block</a> (pending);
<a name="l03270"></a>03270 
<a name="l03271"></a>03271   reply = <a class="code" href="group__DBusPendingCall.html#gc34424aae7350bc37ef65402352057ff">dbus_pending_call_steal_reply</a> (pending);
<a name="l03272"></a>03272   <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l03273"></a>03273 
<a name="l03274"></a>03274   <span class="comment">/* call_complete_and_unlock() called from pending_call_block() should</span>
<a name="l03275"></a>03275 <span class="comment">   * always fill this in.</span>
<a name="l03276"></a>03276 <span class="comment">   */</span>
<a name="l03277"></a>03277   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (reply != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03278"></a>03278   
<a name="l03279"></a>03279    <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#gea5de0b66799aa0baebde2ca41f640b9">dbus_set_error_from_message</a> (error, reply))
<a name="l03280"></a>03280     {
<a name="l03281"></a>03281       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (reply);
<a name="l03282"></a>03282       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03283"></a>03283     }
<a name="l03284"></a>03284   <span class="keywordflow">else</span>
<a name="l03285"></a>03285     <span class="keywordflow">return</span> reply;
<a name="l03286"></a>03286 }
<a name="l03287"></a>03287 
<a name="l03296"></a>03296 <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a>
<a name="l03297"></a>03297 _dbus_connection_flush_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03298"></a>03298 {
<a name="l03299"></a>03299   <span class="comment">/* We have to specify DBUS_ITERATION_DO_READING here because</span>
<a name="l03300"></a>03300 <span class="comment">   * otherwise we could have two apps deadlock if they are both doing</span>
<a name="l03301"></a>03301 <span class="comment">   * a flush(), and the kernel buffers fill up. This could change the</span>
<a name="l03302"></a>03302 <span class="comment">   * dispatch status.</span>
<a name="l03303"></a>03303 <span class="comment">   */</span>
<a name="l03304"></a>03304   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03305"></a>03305 
<a name="l03306"></a>03306   HAVE_LOCK_CHECK (connection);
<a name="l03307"></a>03307   
<a name="l03308"></a>03308   <span class="keywordflow">while</span> (connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> &gt; 0 &amp;&amp;
<a name="l03309"></a>03309          _dbus_connection_get_is_connected_unlocked (connection))
<a name="l03310"></a>03310     {
<a name="l03311"></a>03311       _dbus_verbose (<span class="stringliteral">"doing iteration in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03312"></a>03312       HAVE_LOCK_CHECK (connection);
<a name="l03313"></a>03313       <a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">_dbus_connection_do_iteration_unlocked</a> (connection,
<a name="l03314"></a>03314                                               DBUS_ITERATION_DO_READING |
<a name="l03315"></a>03315                                               DBUS_ITERATION_DO_WRITING |
<a name="l03316"></a>03316                                               DBUS_ITERATION_BLOCK,
<a name="l03317"></a>03317                                               -1);
<a name="l03318"></a>03318     }
<a name="l03319"></a>03319 
<a name="l03320"></a>03320   HAVE_LOCK_CHECK (connection);
<a name="l03321"></a>03321   _dbus_verbose (<span class="stringliteral">"%s middle\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03322"></a>03322   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l03323"></a>03323 
<a name="l03324"></a>03324   HAVE_LOCK_CHECK (connection);
<a name="l03325"></a>03325   <span class="keywordflow">return</span> status;
<a name="l03326"></a>03326 }
<a name="l03327"></a>03327 
<a name="l03333"></a>03333 <span class="keywordtype">void</span>
<a name="l03334"></a><a class="code" href="group__DBusConnection.html#g93aed4ba4a2a22d9bdc63a5732dd41dd">03334</a> <a class="code" href="group__DBusConnection.html#g93aed4ba4a2a22d9bdc63a5732dd41dd">dbus_connection_flush</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03335"></a>03335 {
<a name="l03336"></a>03336   <span class="comment">/* We have to specify DBUS_ITERATION_DO_READING here because</span>
<a name="l03337"></a>03337 <span class="comment">   * otherwise we could have two apps deadlock if they are both doing</span>
<a name="l03338"></a>03338 <span class="comment">   * a flush(), and the kernel buffers fill up. This could change the</span>
<a name="l03339"></a>03339 <span class="comment">   * dispatch status.</span>
<a name="l03340"></a>03340 <span class="comment">   */</span>
<a name="l03341"></a>03341   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03342"></a>03342 
<a name="l03343"></a>03343   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03344"></a>03344   
<a name="l03345"></a>03345   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03346"></a>03346 
<a name="l03347"></a>03347   status = _dbus_connection_flush_unlocked (connection);
<a name="l03348"></a>03348   
<a name="l03349"></a>03349   HAVE_LOCK_CHECK (connection);
<a name="l03350"></a>03350   <span class="comment">/* Unlocks and calls out to user code */</span>
<a name="l03351"></a>03351   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l03352"></a>03352 
<a name="l03353"></a>03353   _dbus_verbose (<span class="stringliteral">"%s end\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03354"></a>03354 }
<a name="l03355"></a>03355 
<a name="l03366"></a>03366 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03367"></a>03367 _dbus_connection_read_write_dispatch (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03368"></a>03368                                      <span class="keywordtype">int</span>             timeout_milliseconds, 
<a name="l03369"></a>03369                                      <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>     dispatch)
<a name="l03370"></a>03370 {
<a name="l03371"></a>03371   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> dstatus;
<a name="l03372"></a>03372   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> no_progress_possible;
<a name="l03373"></a>03373   
<a name="l03374"></a>03374   dstatus = <a class="code" href="group__DBusConnection.html#g79a08402bb848f16d9276e6650fdfc9a">dbus_connection_get_dispatch_status</a> (connection);
<a name="l03375"></a>03375 
<a name="l03376"></a>03376   <span class="keywordflow">if</span> (dispatch &amp;&amp; dstatus == <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>)
<a name="l03377"></a>03377     {
<a name="l03378"></a>03378       _dbus_verbose (<span class="stringliteral">"doing dispatch in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03379"></a>03379       <a class="code" href="group__DBusConnection.html#ge1b196d2d4b256b9276bb7bc6879813b">dbus_connection_dispatch</a> (connection);
<a name="l03380"></a>03380       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03381"></a>03381     }
<a name="l03382"></a>03382   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dstatus == <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d25af20a035f29cfa67fb8d69fb693b685">DBUS_DISPATCH_NEED_MEMORY</a>)
<a name="l03383"></a>03383     {
<a name="l03384"></a>03384       _dbus_verbose (<span class="stringliteral">"pausing for memory in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03385"></a>03385       _dbus_memory_pause_based_on_timeout (timeout_milliseconds);
<a name="l03386"></a>03386       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03387"></a>03387     }
<a name="l03388"></a>03388   <span class="keywordflow">else</span>
<a name="l03389"></a>03389     {
<a name="l03390"></a>03390       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03391"></a>03391       <span class="keywordflow">if</span> (_dbus_connection_get_is_connected_unlocked (connection))
<a name="l03392"></a>03392         {
<a name="l03393"></a>03393           _dbus_verbose (<span class="stringliteral">"doing iteration in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03394"></a>03394           <a class="code" href="group__DBusConnectionInternals.html#g9349ea2fb5197925c420d26772eae769">_dbus_connection_do_iteration_unlocked</a> (connection,
<a name="l03395"></a>03395                                                   DBUS_ITERATION_DO_READING |
<a name="l03396"></a>03396                                                   DBUS_ITERATION_DO_WRITING |
<a name="l03397"></a>03397                                                   DBUS_ITERATION_BLOCK,
<a name="l03398"></a>03398                                                   timeout_milliseconds);
<a name="l03399"></a>03399         }
<a name="l03400"></a>03400     }
<a name="l03401"></a>03401   
<a name="l03402"></a>03402   HAVE_LOCK_CHECK (connection);
<a name="l03403"></a>03403   <span class="comment">/* If we can dispatch, we can make progress until the Disconnected message</span>
<a name="l03404"></a>03404 <span class="comment">   * has been processed; if we can only read/write, we can make progress</span>
<a name="l03405"></a>03405 <span class="comment">   * as long as the transport is open.</span>
<a name="l03406"></a>03406 <span class="comment">   */</span>
<a name="l03407"></a>03407   <span class="keywordflow">if</span> (dispatch)
<a name="l03408"></a>03408     no_progress_possible = connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> == 0 &amp;&amp;
<a name="l03409"></a>03409       connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03410"></a>03410   <span class="keywordflow">else</span>
<a name="l03411"></a>03411     no_progress_possible = _dbus_connection_get_is_connected_unlocked (connection);
<a name="l03412"></a>03412   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l03413"></a>03413   <span class="keywordflow">return</span> !no_progress_possible; <span class="comment">/* TRUE if we can make more progress */</span>
<a name="l03414"></a>03414 }
<a name="l03415"></a>03415 
<a name="l03416"></a>03416 
<a name="l03451"></a>03451 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03452"></a><a class="code" href="group__DBusConnection.html#g65668674acca39dac5f5c434d5d7cc2e">03452</a> <a class="code" href="group__DBusConnection.html#g65668674acca39dac5f5c434d5d7cc2e">dbus_connection_read_write_dispatch</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03453"></a>03453                                      <span class="keywordtype">int</span>             timeout_milliseconds)
<a name="l03454"></a>03454 {
<a name="l03455"></a>03455   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03456"></a>03456   _dbus_return_val_if_fail (timeout_milliseconds &gt;= 0 || timeout_milliseconds == -1, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03457"></a>03457    <span class="keywordflow">return</span> _dbus_connection_read_write_dispatch(connection, timeout_milliseconds, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l03458"></a>03458 }
<a name="l03459"></a>03459 
<a name="l03483"></a>03483 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> 
<a name="l03484"></a><a class="code" href="group__DBusConnection.html#g4ec583a30648dc8cd5dad868cf5472da">03484</a> <a class="code" href="group__DBusConnection.html#g4ec583a30648dc8cd5dad868cf5472da">dbus_connection_read_write</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection, 
<a name="l03485"></a>03485                             <span class="keywordtype">int</span>             timeout_milliseconds) 
<a name="l03486"></a>03486 { 
<a name="l03487"></a>03487   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03488"></a>03488   _dbus_return_val_if_fail (timeout_milliseconds &gt;= 0 || timeout_milliseconds == -1, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03489"></a>03489    <span class="keywordflow">return</span> _dbus_connection_read_write_dispatch(connection, timeout_milliseconds, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03490"></a>03490 }
<a name="l03491"></a>03491 
<a name="l03492"></a>03492 <span class="comment">/* We need to call this anytime we pop the head of the queue, and then</span>
<a name="l03493"></a>03493 <span class="comment"> * update_dispatch_status_and_unlock needs to be called afterward</span>
<a name="l03494"></a>03494 <span class="comment"> * which will "process" the disconnected message and set</span>
<a name="l03495"></a>03495 <span class="comment"> * disconnected_message_processed.</span>
<a name="l03496"></a>03496 <span class="comment"> */</span>
<a name="l03497"></a>03497 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03498"></a>03498 check_disconnected_message_arrived_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03499"></a>03499                                              <a class="code" href="structDBusMessage.html">DBusMessage</a>    *head_of_queue)
<a name="l03500"></a>03500 {
<a name="l03501"></a>03501   HAVE_LOCK_CHECK (connection);
<a name="l03502"></a>03502 
<a name="l03503"></a>03503   <span class="comment">/* checking that the link is NULL is an optimization to avoid the is_signal call */</span>
<a name="l03504"></a>03504   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> &amp;&amp;
<a name="l03505"></a>03505       <a class="code" href="group__DBusMessage.html#gf35ecf35c463650dad01fa33f6300fac">dbus_message_is_signal</a> (head_of_queue,
<a name="l03506"></a>03506                               <a class="code" href="group__DBusShared.html#g9ef6478aae637449ec0c5de1679f75ce">DBUS_INTERFACE_LOCAL</a>,
<a name="l03507"></a>03507                               <span class="stringliteral">"Disconnected"</span>))
<a name="l03508"></a>03508     {
<a name="l03509"></a>03509       connection-&gt;<a class="code" href="structDBusConnection.html#48d141d4311211e921571043bdbaeefb">disconnected_message_arrived</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03510"></a>03510     }
<a name="l03511"></a>03511 }
<a name="l03512"></a>03512 
<a name="l03532"></a>03532 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l03533"></a><a class="code" href="group__DBusConnection.html#g6992174da00706cf1653a5cdb19cf837">03533</a> <a class="code" href="group__DBusConnection.html#g6992174da00706cf1653a5cdb19cf837">dbus_connection_borrow_message</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03534"></a>03534 {
<a name="l03535"></a>03535   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03536"></a>03536   <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l03537"></a>03537 
<a name="l03538"></a>03538   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03539"></a>03539 
<a name="l03540"></a>03540   _dbus_verbose (<span class="stringliteral">"%s start\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03541"></a>03541   
<a name="l03542"></a>03542   <span class="comment">/* this is called for the side effect that it queues</span>
<a name="l03543"></a>03543 <span class="comment">   * up any messages from the transport</span>
<a name="l03544"></a>03544 <span class="comment">   */</span>
<a name="l03545"></a>03545   status = <a class="code" href="group__DBusConnection.html#g79a08402bb848f16d9276e6650fdfc9a">dbus_connection_get_dispatch_status</a> (connection);
<a name="l03546"></a>03546   <span class="keywordflow">if</span> (status != <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>)
<a name="l03547"></a>03547     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03548"></a>03548   
<a name="l03549"></a>03549   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03550"></a>03550 
<a name="l03551"></a>03551   _dbus_connection_acquire_dispatch (connection);
<a name="l03552"></a>03552 
<a name="l03553"></a>03553   <span class="comment">/* While a message is outstanding, the dispatch lock is held */</span>
<a name="l03554"></a>03554   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03555"></a>03555 
<a name="l03556"></a>03556   connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> = <a class="code" href="group__DBusList.html#g254e18f698f5fc518bde031e723e67c6">_dbus_list_get_first</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l03557"></a>03557   
<a name="l03558"></a>03558   message = connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>;
<a name="l03559"></a>03559 
<a name="l03560"></a>03560   check_disconnected_message_arrived_unlocked (connection, message);
<a name="l03561"></a>03561   
<a name="l03562"></a>03562   <span class="comment">/* Note that we KEEP the dispatch lock until the message is returned */</span>
<a name="l03563"></a>03563   <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03564"></a>03564     _dbus_connection_release_dispatch (connection);
<a name="l03565"></a>03565 
<a name="l03566"></a>03566   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l03567"></a>03567 
<a name="l03568"></a>03568   <span class="comment">/* We don't update dispatch status until it's returned or stolen */</span>
<a name="l03569"></a>03569   
<a name="l03570"></a>03570   <span class="keywordflow">return</span> message;
<a name="l03571"></a>03571 }
<a name="l03572"></a>03572 
<a name="l03581"></a>03581 <span class="keywordtype">void</span>
<a name="l03582"></a><a class="code" href="group__DBusConnection.html#gc59600eaf27dc75f56c6931bd64603ef">03582</a> <a class="code" href="group__DBusConnection.html#gc59600eaf27dc75f56c6931bd64603ef">dbus_connection_return_message</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03583"></a>03583                                 <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message)
<a name="l03584"></a>03584 {
<a name="l03585"></a>03585   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03586"></a>03586   
<a name="l03587"></a>03587   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03588"></a>03588   _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03589"></a>03589   _dbus_return_if_fail (message == connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03590"></a>03590   _dbus_return_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03591"></a>03591   
<a name="l03592"></a>03592   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03593"></a>03593   
<a name="l03594"></a>03594   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message == connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03595"></a>03595   
<a name="l03596"></a>03596   connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03597"></a>03597 
<a name="l03598"></a>03598   _dbus_connection_release_dispatch (connection); 
<a name="l03599"></a>03599 
<a name="l03600"></a>03600   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l03601"></a>03601   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l03602"></a>03602 }
<a name="l03603"></a>03603 
<a name="l03613"></a>03613 <span class="keywordtype">void</span>
<a name="l03614"></a><a class="code" href="group__DBusConnection.html#gb6e0bd7b0e631ea94d1b2c1224ccf199">03614</a> <a class="code" href="group__DBusConnection.html#gb6e0bd7b0e631ea94d1b2c1224ccf199">dbus_connection_steal_borrowed_message</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03615"></a>03615                                         <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message)
<a name="l03616"></a>03616 {
<a name="l03617"></a>03617   <a class="code" href="structDBusMessage.html">DBusMessage</a> *pop_message;
<a name="l03618"></a>03618   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03619"></a>03619 
<a name="l03620"></a>03620   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03621"></a>03621   _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03622"></a>03622   _dbus_return_if_fail (message == connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03623"></a>03623   _dbus_return_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03624"></a>03624   
<a name="l03625"></a>03625   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03626"></a>03626  
<a name="l03627"></a>03627   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message == connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03628"></a>03628 
<a name="l03629"></a>03629   pop_message = <a class="code" href="group__DBusList.html#gcb96c9d3e9a869e63b8db4f8913a5a60">_dbus_list_pop_first</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l03630"></a>03630   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message == pop_message);
<a name="l03631"></a>03631   
<a name="l03632"></a>03632   connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> -= 1;
<a name="l03633"></a>03633  
<a name="l03634"></a>03634   _dbus_verbose (<span class="stringliteral">"Incoming message %p stolen from queue, %d incoming\n"</span>,
<a name="l03635"></a>03635                  message, connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>);
<a name="l03636"></a>03636  
<a name="l03637"></a>03637   connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03638"></a>03638 
<a name="l03639"></a>03639   _dbus_connection_release_dispatch (connection);
<a name="l03640"></a>03640 
<a name="l03641"></a>03641   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l03642"></a>03642   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l03643"></a>03643 }
<a name="l03644"></a>03644 
<a name="l03645"></a>03645 <span class="comment">/* See dbus_connection_pop_message, but requires the caller to own</span>
<a name="l03646"></a>03646 <span class="comment"> * the lock before calling. May drop the lock while running.</span>
<a name="l03647"></a>03647 <span class="comment"> */</span>
<a name="l03648"></a>03648 <span class="keyword">static</span> <a class="code" href="structDBusList.html">DBusList</a>*
<a name="l03649"></a>03649 _dbus_connection_pop_message_link_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03650"></a>03650 {
<a name="l03651"></a>03651   HAVE_LOCK_CHECK (connection);
<a name="l03652"></a>03652   
<a name="l03653"></a>03653   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03654"></a>03654   
<a name="l03655"></a>03655   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> &gt; 0)
<a name="l03656"></a>03656     {
<a name="l03657"></a>03657       <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l03658"></a>03658 
<a name="l03659"></a>03659       link = <a class="code" href="group__DBusList.html#gab9a957eca9bf5466bbf377a23b4b25c">_dbus_list_pop_first_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l03660"></a>03660       connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> -= 1;
<a name="l03661"></a>03661 
<a name="l03662"></a>03662       _dbus_verbose (<span class="stringliteral">"Message %p (%d %s %s %s '%s') removed from incoming queue %p, %d incoming\n"</span>,
<a name="l03663"></a>03663                      link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>,
<a name="l03664"></a>03664                      <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>),
<a name="l03665"></a>03665                      <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) ?
<a name="l03666"></a>03666                      <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) :
<a name="l03667"></a>03667                      <span class="stringliteral">"no path"</span>,
<a name="l03668"></a>03668                      <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) ?
<a name="l03669"></a>03669                      <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) :
<a name="l03670"></a>03670                      <span class="stringliteral">"no interface"</span>,
<a name="l03671"></a>03671                      <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) ?
<a name="l03672"></a>03672                      <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) :
<a name="l03673"></a>03673                      <span class="stringliteral">"no member"</span>,
<a name="l03674"></a>03674                      <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>),
<a name="l03675"></a>03675                      connection, connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>);
<a name="l03676"></a>03676 
<a name="l03677"></a>03677       check_disconnected_message_arrived_unlocked (connection, link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l03678"></a>03678       
<a name="l03679"></a>03679       <span class="keywordflow">return</span> link;
<a name="l03680"></a>03680     }
<a name="l03681"></a>03681   <span class="keywordflow">else</span>
<a name="l03682"></a>03682     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03683"></a>03683 }
<a name="l03684"></a>03684 
<a name="l03685"></a>03685 <span class="comment">/* See dbus_connection_pop_message, but requires the caller to own</span>
<a name="l03686"></a>03686 <span class="comment"> * the lock before calling. May drop the lock while running.</span>
<a name="l03687"></a>03687 <span class="comment"> */</span>
<a name="l03688"></a>03688 <span class="keyword">static</span> <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l03689"></a>03689 _dbus_connection_pop_message_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03690"></a>03690 {
<a name="l03691"></a>03691   <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l03692"></a>03692 
<a name="l03693"></a>03693   HAVE_LOCK_CHECK (connection);
<a name="l03694"></a>03694   
<a name="l03695"></a>03695   link = _dbus_connection_pop_message_link_unlocked (connection);
<a name="l03696"></a>03696 
<a name="l03697"></a>03697   <span class="keywordflow">if</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03698"></a>03698     {
<a name="l03699"></a>03699       <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l03700"></a>03700       
<a name="l03701"></a>03701       message = link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l03702"></a>03702       
<a name="l03703"></a>03703       <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (link);
<a name="l03704"></a>03704       
<a name="l03705"></a>03705       <span class="keywordflow">return</span> message;
<a name="l03706"></a>03706     }
<a name="l03707"></a>03707   <span class="keywordflow">else</span>
<a name="l03708"></a>03708     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03709"></a>03709 }
<a name="l03710"></a>03710 
<a name="l03711"></a>03711 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03712"></a>03712 _dbus_connection_putback_message_link_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03713"></a>03713                                                 <a class="code" href="structDBusList.html">DBusList</a>       *message_link)
<a name="l03714"></a>03714 {
<a name="l03715"></a>03715   HAVE_LOCK_CHECK (connection);
<a name="l03716"></a>03716   
<a name="l03717"></a>03717   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03718"></a>03718   <span class="comment">/* You can't borrow a message while a link is outstanding */</span>
<a name="l03719"></a>03719   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03720"></a>03720   <span class="comment">/* We had to have the dispatch lock across the pop/putback */</span>
<a name="l03721"></a>03721   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03722"></a>03722 
<a name="l03723"></a>03723   <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l03724"></a>03724                            message_link);
<a name="l03725"></a>03725   connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> += 1;
<a name="l03726"></a>03726 
<a name="l03727"></a>03727   _dbus_verbose (<span class="stringliteral">"Message %p (%d %s %s '%s') put back into queue %p, %d incoming\n"</span>,
<a name="l03728"></a>03728                  message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>,
<a name="l03729"></a>03729                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>),
<a name="l03730"></a>03730                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) ?
<a name="l03731"></a>03731                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) :
<a name="l03732"></a>03732                  <span class="stringliteral">"no interface"</span>,
<a name="l03733"></a>03733                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) ?
<a name="l03734"></a>03734                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>) :
<a name="l03735"></a>03735                  <span class="stringliteral">"no member"</span>,
<a name="l03736"></a>03736                  <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>),
<a name="l03737"></a>03737                  connection, connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>);
<a name="l03738"></a>03738 }
<a name="l03739"></a>03739 
<a name="l03759"></a>03759 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l03760"></a><a class="code" href="group__DBusConnection.html#g45dd4e9c961e8d1a4d3f8cb0e4a4123d">03760</a> <a class="code" href="group__DBusConnection.html#g45dd4e9c961e8d1a4d3f8cb0e4a4123d">dbus_connection_pop_message</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03761"></a>03761 {
<a name="l03762"></a>03762   <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l03763"></a>03763   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03764"></a>03764 
<a name="l03765"></a>03765   _dbus_verbose (<span class="stringliteral">"%s start\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03766"></a>03766   
<a name="l03767"></a>03767   <span class="comment">/* this is called for the side effect that it queues</span>
<a name="l03768"></a>03768 <span class="comment">   * up any messages from the transport</span>
<a name="l03769"></a>03769 <span class="comment">   */</span>
<a name="l03770"></a>03770   status = <a class="code" href="group__DBusConnection.html#g79a08402bb848f16d9276e6650fdfc9a">dbus_connection_get_dispatch_status</a> (connection);
<a name="l03771"></a>03771   <span class="keywordflow">if</span> (status != <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>)
<a name="l03772"></a>03772     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03773"></a>03773   
<a name="l03774"></a>03774   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03775"></a>03775   _dbus_connection_acquire_dispatch (connection);
<a name="l03776"></a>03776   HAVE_LOCK_CHECK (connection);
<a name="l03777"></a>03777   
<a name="l03778"></a>03778   message = _dbus_connection_pop_message_unlocked (connection);
<a name="l03779"></a>03779 
<a name="l03780"></a>03780   _dbus_verbose (<span class="stringliteral">"Returning popped message %p\n"</span>, message);    
<a name="l03781"></a>03781 
<a name="l03782"></a>03782   _dbus_connection_release_dispatch (connection);
<a name="l03783"></a>03783 
<a name="l03784"></a>03784   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l03785"></a>03785   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l03786"></a>03786   
<a name="l03787"></a>03787   <span class="keywordflow">return</span> message;
<a name="l03788"></a>03788 }
<a name="l03789"></a>03789 
<a name="l03797"></a>03797 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03798"></a>03798 _dbus_connection_acquire_dispatch (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03799"></a>03799 {
<a name="l03800"></a>03800   HAVE_LOCK_CHECK (connection);
<a name="l03801"></a>03801 
<a name="l03802"></a>03802   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l03803"></a>03803   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l03804"></a>03804   
<a name="l03805"></a>03805   _dbus_verbose (<span class="stringliteral">"%s locking dispatch_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03806"></a>03806   <a class="code" href="group__DBusThreadsInternals.html#ge6eafe138e9c317bfb25971d1d8bef2d">_dbus_mutex_lock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l03807"></a>03807 
<a name="l03808"></a>03808   <span class="keywordflow">while</span> (connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>)
<a name="l03809"></a>03809     {
<a name="l03810"></a>03810       _dbus_verbose (<span class="stringliteral">"%s waiting for dispatch to be acquirable\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03811"></a>03811       <a class="code" href="group__DBusThreadsInternals.html#g393c0cfdec998dc5abe49480ac21ea51">_dbus_condvar_wait</a> (connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>, 
<a name="l03812"></a>03812                           connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l03813"></a>03813     }
<a name="l03814"></a>03814   
<a name="l03815"></a>03815   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03816"></a>03816 
<a name="l03817"></a>03817   connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03818"></a>03818 
<a name="l03819"></a>03819   _dbus_verbose (<span class="stringliteral">"%s unlocking dispatch_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03820"></a>03820   <a class="code" href="group__DBusThreadsInternals.html#g94dcc555488e5d677f10bd3898d61c00">_dbus_mutex_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l03821"></a>03821   
<a name="l03822"></a>03822   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l03823"></a>03823   <a class="code" href="group__DBusConnectionInternals.html#g9ffbd9aa4f07cb30d92887e956a9fd43">_dbus_connection_unref_unlocked</a> (connection);
<a name="l03824"></a>03824 }
<a name="l03825"></a>03825 
<a name="l03833"></a>03833 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03834"></a>03834 _dbus_connection_release_dispatch (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03835"></a>03835 {
<a name="l03836"></a>03836   HAVE_LOCK_CHECK (connection);
<a name="l03837"></a>03837   
<a name="l03838"></a>03838   _dbus_verbose (<span class="stringliteral">"%s locking dispatch_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03839"></a>03839   <a class="code" href="group__DBusThreadsInternals.html#ge6eafe138e9c317bfb25971d1d8bef2d">_dbus_mutex_lock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l03840"></a>03840   
<a name="l03841"></a>03841   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03842"></a>03842 
<a name="l03843"></a>03843   connection-&gt;<a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03844"></a>03844   <a class="code" href="group__DBusThreadsInternals.html#g8af2fd84773022e7e7ce1f21f0126203">_dbus_condvar_wake_one</a> (connection-&gt;<a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>);
<a name="l03845"></a>03845 
<a name="l03846"></a>03846   _dbus_verbose (<span class="stringliteral">"%s unlocking dispatch_mutex\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l03847"></a>03847   <a class="code" href="group__DBusThreadsInternals.html#g94dcc555488e5d677f10bd3898d61c00">_dbus_mutex_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l03848"></a>03848 }
<a name="l03849"></a>03849 
<a name="l03850"></a>03850 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03851"></a>03851 _dbus_connection_failed_pop (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l03852"></a>03852                              <a class="code" href="structDBusList.html">DBusList</a>       *message_link)
<a name="l03853"></a>03853 {
<a name="l03854"></a>03854   <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l03855"></a>03855                            message_link);
<a name="l03856"></a>03856   connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> += 1;
<a name="l03857"></a>03857 }
<a name="l03858"></a>03858 
<a name="l03859"></a>03859 <span class="comment">/* Note this may be called multiple times since we don't track whether we already did it */</span>
<a name="l03860"></a>03860 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03861"></a>03861 notify_disconnected_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03862"></a>03862 {
<a name="l03863"></a>03863   HAVE_LOCK_CHECK (connection);
<a name="l03864"></a>03864 
<a name="l03865"></a>03865   <span class="comment">/* Set the weakref in dbus-bus.c to NULL, so nobody will get a disconnected</span>
<a name="l03866"></a>03866 <span class="comment">   * connection from dbus_bus_get(). We make the same guarantee for</span>
<a name="l03867"></a>03867 <span class="comment">   * dbus_connection_open() but in a different way since we don't want to</span>
<a name="l03868"></a>03868 <span class="comment">   * unref right here; we instead check for connectedness before returning</span>
<a name="l03869"></a>03869 <span class="comment">   * the connection from the hash.</span>
<a name="l03870"></a>03870 <span class="comment">   */</span>
<a name="l03871"></a>03871   <a class="code" href="group__DBusBusInternals.html#g0e7fe5d0dcaca7ecb4b5a7ace23d6286">_dbus_bus_notify_shared_connection_disconnected_unlocked</a> (connection);
<a name="l03872"></a>03872 
<a name="l03873"></a>03873   <span class="comment">/* Dump the outgoing queue, we aren't going to be able to</span>
<a name="l03874"></a>03874 <span class="comment">   * send it now, and we'd like accessors like</span>
<a name="l03875"></a>03875 <span class="comment">   * dbus_connection_get_outgoing_size() to be accurate.</span>
<a name="l03876"></a>03876 <span class="comment">   */</span>
<a name="l03877"></a>03877   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> &gt; 0)
<a name="l03878"></a>03878     {
<a name="l03879"></a>03879       <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l03880"></a>03880       
<a name="l03881"></a>03881       _dbus_verbose (<span class="stringliteral">"Dropping %d outgoing messages since we're disconnected\n"</span>,
<a name="l03882"></a>03882                      connection-&gt;<a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a>);
<a name="l03883"></a>03883       
<a name="l03884"></a>03884       <span class="keywordflow">while</span> ((link = <a class="code" href="group__DBusList.html#g42736fb02458bfffed948a509962c059">_dbus_list_get_last_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>)))
<a name="l03885"></a>03885         {
<a name="l03886"></a>03886           <a class="code" href="group__DBusConnectionInternals.html#g2d04df24d0f54a4e2dcfbede4ef50f09">_dbus_connection_message_sent</a> (connection, link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l03887"></a>03887         }
<a name="l03888"></a>03888     } 
<a name="l03889"></a>03889 }
<a name="l03890"></a>03890 
<a name="l03891"></a>03891 <span class="comment">/* Note this may be called multiple times since we don't track whether we already did it */</span>
<a name="l03892"></a>03892 <span class="keyword">static</span> <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a>
<a name="l03893"></a>03893 notify_disconnected_and_dispatch_complete_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03894"></a>03894 {
<a name="l03895"></a>03895   HAVE_LOCK_CHECK (connection);
<a name="l03896"></a>03896   
<a name="l03897"></a>03897   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03898"></a>03898     {
<a name="l03899"></a>03899       _dbus_verbose (<span class="stringliteral">"Sending disconnect message from %s\n"</span>,
<a name="l03900"></a>03900                      _DBUS_FUNCTION_NAME);
<a name="l03901"></a>03901       
<a name="l03902"></a>03902       <span class="comment">/* If we have pending calls, queue their timeouts - we want the Disconnected</span>
<a name="l03903"></a>03903 <span class="comment">       * to be the last message, after these timeouts.</span>
<a name="l03904"></a>03904 <span class="comment">       */</span>
<a name="l03905"></a>03905       connection_timeout_and_complete_all_pending_calls_unlocked (connection);
<a name="l03906"></a>03906       
<a name="l03907"></a>03907       <span class="comment">/* We haven't sent the disconnect message already,</span>
<a name="l03908"></a>03908 <span class="comment">       * and all real messages have been queued up.</span>
<a name="l03909"></a>03909 <span class="comment">       */</span>
<a name="l03910"></a>03910       <a class="code" href="group__DBusConnectionInternals.html#gdb7a525dc6b566b575ee4f9b20028b04">_dbus_connection_queue_synthesized_message_link</a> (connection,
<a name="l03911"></a>03911                                                        connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>);
<a name="l03912"></a>03912       connection-&gt;<a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03913"></a>03913 
<a name="l03914"></a>03914       <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>;
<a name="l03915"></a>03915     }
<a name="l03916"></a>03916 
<a name="l03917"></a>03917   <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>;
<a name="l03918"></a>03918 }
<a name="l03919"></a>03919 
<a name="l03920"></a>03920 <span class="keyword">static</span> <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a>
<a name="l03921"></a>03921 _dbus_connection_get_dispatch_status_unlocked (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l03922"></a>03922 {
<a name="l03923"></a>03923   HAVE_LOCK_CHECK (connection);
<a name="l03924"></a>03924   
<a name="l03925"></a>03925   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> &gt; 0)
<a name="l03926"></a>03926     <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>;
<a name="l03927"></a>03927   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!<a class="code" href="group__DBusTransport.html#g4046f36ecbdb75219f2b667f92e75a2b">_dbus_transport_queue_messages</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>))
<a name="l03928"></a>03928     <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d25af20a035f29cfa67fb8d69fb693b685">DBUS_DISPATCH_NEED_MEMORY</a>;
<a name="l03929"></a>03929   <span class="keywordflow">else</span>
<a name="l03930"></a>03930     {
<a name="l03931"></a>03931       <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l03932"></a>03932       <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> is_connected;
<a name="l03933"></a>03933       
<a name="l03934"></a>03934       status = <a class="code" href="group__DBusTransport.html#g32153a834758b5a88d7bde8f7a205c71">_dbus_transport_get_dispatch_status</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l03935"></a>03935       is_connected = <a class="code" href="group__DBusTransport.html#gceee4b098b0177870ad934daad90a9c6">_dbus_transport_get_is_connected</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l03936"></a>03936 
<a name="l03937"></a>03937       _dbus_verbose (<span class="stringliteral">"dispatch status = %s is_connected = %d\n"</span>,
<a name="l03938"></a>03938                      DISPATCH_STATUS_NAME (status), is_connected);
<a name="l03939"></a>03939       
<a name="l03940"></a>03940       <span class="keywordflow">if</span> (!is_connected)
<a name="l03941"></a>03941         {
<a name="l03942"></a>03942           <span class="comment">/* It's possible this would be better done by having an explicit</span>
<a name="l03943"></a>03943 <span class="comment">           * notification from _dbus_transport_disconnect() that would</span>
<a name="l03944"></a>03944 <span class="comment">           * synchronously do this, instead of waiting for the next dispatch</span>
<a name="l03945"></a>03945 <span class="comment">           * status check. However, probably not good to change until it causes</span>
<a name="l03946"></a>03946 <span class="comment">           * a problem.</span>
<a name="l03947"></a>03947 <span class="comment">           */</span>
<a name="l03948"></a>03948           notify_disconnected_unlocked (connection);
<a name="l03949"></a>03949 
<a name="l03950"></a>03950           <span class="comment">/* I'm not sure this is needed; the idea is that we want to</span>
<a name="l03951"></a>03951 <span class="comment">           * queue the Disconnected only after we've read all the</span>
<a name="l03952"></a>03952 <span class="comment">           * messages, but if we're disconnected maybe we are guaranteed</span>
<a name="l03953"></a>03953 <span class="comment">           * to have read them all ?</span>
<a name="l03954"></a>03954 <span class="comment">           */</span>
<a name="l03955"></a>03955           <span class="keywordflow">if</span> (status == <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>)
<a name="l03956"></a>03956             status = notify_disconnected_and_dispatch_complete_unlocked (connection);
<a name="l03957"></a>03957         }
<a name="l03958"></a>03958       
<a name="l03959"></a>03959       <span class="keywordflow">if</span> (status != <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>)
<a name="l03960"></a>03960         <span class="keywordflow">return</span> status;
<a name="l03961"></a>03961       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> &gt; 0)
<a name="l03962"></a>03962         <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>;
<a name="l03963"></a>03963       <span class="keywordflow">else</span>
<a name="l03964"></a>03964         <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>;
<a name="l03965"></a>03965     }
<a name="l03966"></a>03966 }
<a name="l03967"></a>03967 
<a name="l03968"></a>03968 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l03969"></a>03969 _dbus_connection_update_dispatch_status_and_unlock (<a class="code" href="structDBusConnection.html">DBusConnection</a>    *connection,
<a name="l03970"></a>03970                                                     <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> new_status)
<a name="l03971"></a>03971 {
<a name="l03972"></a>03972   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> changed;
<a name="l03973"></a>03973   <a class="code" href="group__DBusConnection.html#gd888331dd2737769f669c5df779fe0ef">DBusDispatchStatusFunction</a> function;
<a name="l03974"></a>03974   <span class="keywordtype">void</span> *data;
<a name="l03975"></a>03975 
<a name="l03976"></a>03976   HAVE_LOCK_CHECK (connection);
<a name="l03977"></a>03977 
<a name="l03978"></a>03978   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l03979"></a>03979 
<a name="l03980"></a>03980   changed = new_status != connection-&gt;<a class="code" href="structDBusConnection.html#f3bbd2ecba171ebb8e952eaa030971d7">last_dispatch_status</a>;
<a name="l03981"></a>03981 
<a name="l03982"></a>03982   connection-&gt;<a class="code" href="structDBusConnection.html#f3bbd2ecba171ebb8e952eaa030971d7">last_dispatch_status</a> = new_status;
<a name="l03983"></a>03983 
<a name="l03984"></a>03984   function = connection-&gt;<a class="code" href="structDBusConnection.html#f6cbafdf80cd474c654fc226581900a2">dispatch_status_function</a>;
<a name="l03985"></a>03985   data = connection-&gt;<a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">dispatch_status_data</a>;
<a name="l03986"></a>03986 
<a name="l03987"></a>03987   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#48d141d4311211e921571043bdbaeefb">disconnected_message_arrived</a> &amp;&amp;
<a name="l03988"></a>03988       !connection-&gt;<a class="code" href="structDBusConnection.html#3b2707b9d10d0643f91a8e027ae118b5">disconnected_message_processed</a>)
<a name="l03989"></a>03989     {
<a name="l03990"></a>03990       connection-&gt;<a class="code" href="structDBusConnection.html#3b2707b9d10d0643f91a8e027ae118b5">disconnected_message_processed</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03991"></a>03991       
<a name="l03992"></a>03992       <span class="comment">/* this does an unref, but we have a ref</span>
<a name="l03993"></a>03993 <span class="comment">       * so we should not run the finalizer here</span>
<a name="l03994"></a>03994 <span class="comment">       * inside the lock.</span>
<a name="l03995"></a>03995 <span class="comment">       */</span>
<a name="l03996"></a>03996       connection_forget_shared_unlocked (connection);
<a name="l03997"></a>03997 
<a name="l03998"></a>03998       <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#2a9f22339f90157f308a532462218404">exit_on_disconnect</a>)
<a name="l03999"></a>03999         {
<a name="l04000"></a>04000           <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);            
<a name="l04001"></a>04001           
<a name="l04002"></a>04002           _dbus_verbose (<span class="stringliteral">"Exiting on Disconnected signal\n"</span>);
<a name="l04003"></a>04003           <a class="code" href="group__DBusSysdeps.html#g203e3257b50597a8fe7757c920474a20">_dbus_exit</a> (1);
<a name="l04004"></a>04004           <a class="code" href="group__DBusInternalsUtils.html#g0c4961ec784874f1b1f3aeccea8d3da1">_dbus_assert_not_reached</a> (<span class="stringliteral">"Call to exit() returned"</span>);
<a name="l04005"></a>04005         }
<a name="l04006"></a>04006     }
<a name="l04007"></a>04007   
<a name="l04008"></a>04008   <span class="comment">/* We drop the lock */</span>
<a name="l04009"></a>04009   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04010"></a>04010   
<a name="l04011"></a>04011   <span class="keywordflow">if</span> (changed &amp;&amp; function)
<a name="l04012"></a>04012     {
<a name="l04013"></a>04013       _dbus_verbose (<span class="stringliteral">"Notifying of change to dispatch status of %p now %d (%s)\n"</span>,
<a name="l04014"></a>04014                      connection, new_status,
<a name="l04015"></a>04015                      DISPATCH_STATUS_NAME (new_status));
<a name="l04016"></a>04016       (* function) (connection, new_status, data);      
<a name="l04017"></a>04017     }
<a name="l04018"></a>04018   
<a name="l04019"></a>04019   <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l04020"></a>04020 }
<a name="l04021"></a>04021 
<a name="l04047"></a>04047 <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a>
<a name="l04048"></a><a class="code" href="group__DBusConnection.html#g79a08402bb848f16d9276e6650fdfc9a">04048</a> <a class="code" href="group__DBusConnection.html#g79a08402bb848f16d9276e6650fdfc9a">dbus_connection_get_dispatch_status</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l04049"></a>04049 {
<a name="l04050"></a>04050   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l04051"></a>04051 
<a name="l04052"></a>04052   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>);
<a name="l04053"></a>04053 
<a name="l04054"></a>04054   _dbus_verbose (<span class="stringliteral">"%s start\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l04055"></a>04055   
<a name="l04056"></a>04056   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04057"></a>04057 
<a name="l04058"></a>04058   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l04059"></a>04059   
<a name="l04060"></a>04060   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04061"></a>04061 
<a name="l04062"></a>04062   <span class="keywordflow">return</span> status;
<a name="l04063"></a>04063 }
<a name="l04064"></a>04064 
<a name="l04068"></a>04068 <span class="keyword">static</span> <a class="code" href="group__DBusShared.html#g8244b29230187624c24986c24edab1de">DBusHandlerResult</a>
<a name="l04069"></a>04069 _dbus_connection_peer_filter_unlocked_no_update (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l04070"></a>04070                                                  <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message)
<a name="l04071"></a>04071 {
<a name="l04072"></a>04072   <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#b13bc36d7e6f91995768277ecbd5482c">route_peer_messages</a> &amp;&amp; <a class="code" href="group__DBusMessage.html#g3def34b29d7b3bbb06235e04046e8236">dbus_message_get_destination</a> (message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04073"></a>04073     {
<a name="l04074"></a>04074       <span class="comment">/* This means we're letting the bus route this message */</span>
<a name="l04075"></a>04075       <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1decb84b64c92055f2585fe9c29f1e5df68">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>;
<a name="l04076"></a>04076     }
<a name="l04077"></a>04077   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#gcc67b43672cf42042d28b9ee9236cf9b">dbus_message_is_method_call</a> (message,
<a name="l04078"></a>04078                                         <a class="code" href="group__DBusShared.html#gacbd4e8ccdef18c75edd0785fbcc70ef">DBUS_INTERFACE_PEER</a>,
<a name="l04079"></a>04079                                         <span class="stringliteral">"Ping"</span>))
<a name="l04080"></a>04080     {
<a name="l04081"></a>04081       <a class="code" href="structDBusMessage.html">DBusMessage</a> *ret;
<a name="l04082"></a>04082       <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> sent;
<a name="l04083"></a>04083       
<a name="l04084"></a>04084       ret = <a class="code" href="group__DBusMessage.html#gcd04d0109686b8c0d8c1416aa62dee05">dbus_message_new_method_return</a> (message);
<a name="l04085"></a>04085       <span class="keywordflow">if</span> (ret == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04086"></a>04086         <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04087"></a>04087      
<a name="l04088"></a>04088       sent = _dbus_connection_send_unlocked_no_update (connection, ret, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04089"></a>04089 
<a name="l04090"></a>04090       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (ret);
<a name="l04091"></a>04091 
<a name="l04092"></a>04092       <span class="keywordflow">if</span> (!sent)
<a name="l04093"></a>04093         <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04094"></a>04094       
<a name="l04095"></a>04095       <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1deb6df40880a8f322694f14cd2804d3f76">DBUS_HANDLER_RESULT_HANDLED</a>;
<a name="l04096"></a>04096     }
<a name="l04097"></a>04097   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#gcc67b43672cf42042d28b9ee9236cf9b">dbus_message_is_method_call</a> (message,
<a name="l04098"></a>04098                                         <a class="code" href="group__DBusShared.html#gacbd4e8ccdef18c75edd0785fbcc70ef">DBUS_INTERFACE_PEER</a>,
<a name="l04099"></a>04099                                         <span class="stringliteral">"GetMachineId"</span>))
<a name="l04100"></a>04100     {
<a name="l04101"></a>04101       <a class="code" href="structDBusMessage.html">DBusMessage</a> *ret;
<a name="l04102"></a>04102       <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> sent;
<a name="l04103"></a>04103       <a class="code" href="structDBusString.html">DBusString</a> uuid;
<a name="l04104"></a>04104       
<a name="l04105"></a>04105       ret = <a class="code" href="group__DBusMessage.html#gcd04d0109686b8c0d8c1416aa62dee05">dbus_message_new_method_return</a> (message);
<a name="l04106"></a>04106       <span class="keywordflow">if</span> (ret == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04107"></a>04107         <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04108"></a>04108 
<a name="l04109"></a>04109       sent = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l04110"></a>04110       <a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&amp;uuid);
<a name="l04111"></a>04111       <span class="keywordflow">if</span> (<a class="code" href="group__DBusInternalsUtils.html#g49ba67405d677af6cde9329ed87ea91f">_dbus_get_local_machine_uuid_encoded</a> (&amp;uuid))
<a name="l04112"></a>04112         {
<a name="l04113"></a>04113           <span class="keyword">const</span> <span class="keywordtype">char</span> *v_STRING = _dbus_string_get_const_data (&amp;uuid);
<a name="l04114"></a>04114           <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g019a46208b411e1fc8a3a311e8f7f943">dbus_message_append_args</a> (ret,
<a name="l04115"></a>04115                                         <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>, &amp;v_STRING,
<a name="l04116"></a>04116                                         <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>))
<a name="l04117"></a>04117             {
<a name="l04118"></a>04118               sent = _dbus_connection_send_unlocked_no_update (connection, ret, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04119"></a>04119             }
<a name="l04120"></a>04120         }
<a name="l04121"></a>04121       <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&amp;uuid);
<a name="l04122"></a>04122       
<a name="l04123"></a>04123       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (ret);
<a name="l04124"></a>04124 
<a name="l04125"></a>04125       <span class="keywordflow">if</span> (!sent)
<a name="l04126"></a>04126         <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04127"></a>04127       
<a name="l04128"></a>04128       <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1deb6df40880a8f322694f14cd2804d3f76">DBUS_HANDLER_RESULT_HANDLED</a>;
<a name="l04129"></a>04129     }
<a name="l04130"></a>04130   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#gfc99645ba3dfb1e8b231d5ec3ed77fa1">dbus_message_has_interface</a> (message, <a class="code" href="group__DBusShared.html#gacbd4e8ccdef18c75edd0785fbcc70ef">DBUS_INTERFACE_PEER</a>))
<a name="l04131"></a>04131     {
<a name="l04132"></a>04132       <span class="comment">/* We need to bounce anything else with this interface, otherwise apps</span>
<a name="l04133"></a>04133 <span class="comment">       * could start extending the interface and when we added extensions</span>
<a name="l04134"></a>04134 <span class="comment">       * here to DBusConnection we'd break those apps.</span>
<a name="l04135"></a>04135 <span class="comment">       */</span>
<a name="l04136"></a>04136       
<a name="l04137"></a>04137       <a class="code" href="structDBusMessage.html">DBusMessage</a> *ret;
<a name="l04138"></a>04138       <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> sent;
<a name="l04139"></a>04139       
<a name="l04140"></a>04140       ret = <a class="code" href="group__DBusMessage.html#g4b650525068ff3af73d22f803e70f494">dbus_message_new_error</a> (message,
<a name="l04141"></a>04141                                     <a class="code" href="group__DBusProtocol.html#g46c7cbfa1806b0cccb56e9a7ca92f02b">DBUS_ERROR_UNKNOWN_METHOD</a>,
<a name="l04142"></a>04142                                     <span class="stringliteral">"Unknown method invoked on org.freedesktop.DBus.Peer interface"</span>);
<a name="l04143"></a>04143       <span class="keywordflow">if</span> (ret == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04144"></a>04144         <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04145"></a>04145       
<a name="l04146"></a>04146       sent = _dbus_connection_send_unlocked_no_update (connection, ret, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04147"></a>04147       
<a name="l04148"></a>04148       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (ret);
<a name="l04149"></a>04149       
<a name="l04150"></a>04150       <span class="keywordflow">if</span> (!sent)
<a name="l04151"></a>04151         <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04152"></a>04152       
<a name="l04153"></a>04153       <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1deb6df40880a8f322694f14cd2804d3f76">DBUS_HANDLER_RESULT_HANDLED</a>;
<a name="l04154"></a>04154     }
<a name="l04155"></a>04155   <span class="keywordflow">else</span>
<a name="l04156"></a>04156     {
<a name="l04157"></a>04157       <span class="keywordflow">return</span> <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1decb84b64c92055f2585fe9c29f1e5df68">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>;
<a name="l04158"></a>04158     }
<a name="l04159"></a>04159 }
<a name="l04160"></a>04160 
<a name="l04167"></a>04167 <span class="keyword">static</span> <a class="code" href="group__DBusShared.html#g8244b29230187624c24986c24edab1de">DBusHandlerResult</a>
<a name="l04168"></a>04168 _dbus_connection_run_builtin_filters_unlocked_no_update (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l04169"></a>04169                                                            <a class="code" href="structDBusMessage.html">DBusMessage</a>    *message)
<a name="l04170"></a>04170 {
<a name="l04171"></a>04171   <span class="comment">/* We just run one filter for now but have the option to run more</span>
<a name="l04172"></a>04172 <span class="comment">     if the spec calls for it in the future */</span>
<a name="l04173"></a>04173 
<a name="l04174"></a>04174   <span class="keywordflow">return</span> _dbus_connection_peer_filter_unlocked_no_update (connection, message);
<a name="l04175"></a>04175 }
<a name="l04176"></a>04176 
<a name="l04219"></a>04219 <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a>
<a name="l04220"></a><a class="code" href="group__DBusConnection.html#ge1b196d2d4b256b9276bb7bc6879813b">04220</a> <a class="code" href="group__DBusConnection.html#ge1b196d2d4b256b9276bb7bc6879813b">dbus_connection_dispatch</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l04221"></a>04221 {
<a name="l04222"></a>04222   <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l04223"></a>04223   <a class="code" href="structDBusList.html">DBusList</a> *link, *filter_list_copy, *message_link;
<a name="l04224"></a>04224   <a class="code" href="group__DBusShared.html#g8244b29230187624c24986c24edab1de">DBusHandlerResult</a> result;
<a name="l04225"></a>04225   <a class="code" href="structDBusPendingCall.html">DBusPendingCall</a> *pending;
<a name="l04226"></a>04226   <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> reply_serial;
<a name="l04227"></a>04227   <a class="code" href="group__DBusConnection.html#gbf250a32ff740b2a8c99136e0142d8d2">DBusDispatchStatus</a> status;
<a name="l04228"></a>04228 
<a name="l04229"></a>04229   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2cb9bb9daa90f520d5fc9e84de3c5f017">DBUS_DISPATCH_COMPLETE</a>);
<a name="l04230"></a>04230 
<a name="l04231"></a>04231   _dbus_verbose (<span class="stringliteral">"%s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l04232"></a>04232   
<a name="l04233"></a>04233   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04234"></a>04234   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l04235"></a>04235   <span class="keywordflow">if</span> (status != <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d2df8e8a594ab338cb9cf7855b19e37e93">DBUS_DISPATCH_DATA_REMAINS</a>)
<a name="l04236"></a>04236     {
<a name="l04237"></a>04237       <span class="comment">/* unlocks and calls out to user code */</span>
<a name="l04238"></a>04238       _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l04239"></a>04239       <span class="keywordflow">return</span> status;
<a name="l04240"></a>04240     }
<a name="l04241"></a>04241   
<a name="l04242"></a>04242   <span class="comment">/* We need to ref the connection since the callback could potentially</span>
<a name="l04243"></a>04243 <span class="comment">   * drop the last ref to it</span>
<a name="l04244"></a>04244 <span class="comment">   */</span>
<a name="l04245"></a>04245   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l04246"></a>04246 
<a name="l04247"></a>04247   _dbus_connection_acquire_dispatch (connection);
<a name="l04248"></a>04248   HAVE_LOCK_CHECK (connection);
<a name="l04249"></a>04249 
<a name="l04250"></a>04250   message_link = _dbus_connection_pop_message_link_unlocked (connection);
<a name="l04251"></a>04251   <span class="keywordflow">if</span> (message_link == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04252"></a>04252     {
<a name="l04253"></a>04253       <span class="comment">/* another thread dispatched our stuff */</span>
<a name="l04254"></a>04254 
<a name="l04255"></a>04255       _dbus_verbose (<span class="stringliteral">"another thread dispatched message (during acquire_dispatch above)\n"</span>);
<a name="l04256"></a>04256       
<a name="l04257"></a>04257       _dbus_connection_release_dispatch (connection);
<a name="l04258"></a>04258 
<a name="l04259"></a>04259       status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l04260"></a>04260 
<a name="l04261"></a>04261       _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l04262"></a>04262       
<a name="l04263"></a>04263       <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l04264"></a>04264       
<a name="l04265"></a>04265       <span class="keywordflow">return</span> status;
<a name="l04266"></a>04266     }
<a name="l04267"></a>04267 
<a name="l04268"></a>04268   message = message_link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l04269"></a>04269 
<a name="l04270"></a>04270   _dbus_verbose (<span class="stringliteral">" dispatching message %p (%d %s %s '%s')\n"</span>,
<a name="l04271"></a>04271                  message,
<a name="l04272"></a>04272                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message),
<a name="l04273"></a>04273                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) ?
<a name="l04274"></a>04274                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) :
<a name="l04275"></a>04275                  <span class="stringliteral">"no interface"</span>,
<a name="l04276"></a>04276                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) ?
<a name="l04277"></a>04277                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) :
<a name="l04278"></a>04278                  <span class="stringliteral">"no member"</span>,
<a name="l04279"></a>04279                  <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message));
<a name="l04280"></a>04280 
<a name="l04281"></a>04281   result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1decb84b64c92055f2585fe9c29f1e5df68">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>;
<a name="l04282"></a>04282   
<a name="l04283"></a>04283   <span class="comment">/* Pending call handling must be first, because if you do</span>
<a name="l04284"></a>04284 <span class="comment">   * dbus_connection_send_with_reply_and_block() or</span>
<a name="l04285"></a>04285 <span class="comment">   * dbus_pending_call_block() then no handlers/filters will be run on</span>
<a name="l04286"></a>04286 <span class="comment">   * the reply. We want consistent semantics in the case where we</span>
<a name="l04287"></a>04287 <span class="comment">   * dbus_connection_dispatch() the reply.</span>
<a name="l04288"></a>04288 <span class="comment">   */</span>
<a name="l04289"></a>04289   
<a name="l04290"></a>04290   reply_serial = <a class="code" href="group__DBusMessage.html#g1d7466805d255a82109d4f71b1008ff2">dbus_message_get_reply_serial</a> (message);
<a name="l04291"></a>04291   pending = <a class="code" href="group__DBusHashTable.html#g36ff49c4c35599e6fcdadc7f6805c49e">_dbus_hash_table_lookup_int</a> (connection-&gt;<a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>,
<a name="l04292"></a>04292                                          reply_serial);
<a name="l04293"></a>04293   <span class="keywordflow">if</span> (pending)
<a name="l04294"></a>04294     {
<a name="l04295"></a>04295       _dbus_verbose (<span class="stringliteral">"Dispatching a pending reply\n"</span>);
<a name="l04296"></a>04296       complete_pending_call_and_unlock (connection, pending, message);
<a name="l04297"></a>04297       pending = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* it's probably unref'd */</span>
<a name="l04298"></a>04298       
<a name="l04299"></a>04299       <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04300"></a>04300       _dbus_verbose (<span class="stringliteral">"pending call completed in dispatch\n"</span>);
<a name="l04301"></a>04301       result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1deb6df40880a8f322694f14cd2804d3f76">DBUS_HANDLER_RESULT_HANDLED</a>;
<a name="l04302"></a>04302       <span class="keywordflow">goto</span> out;
<a name="l04303"></a>04303     }
<a name="l04304"></a>04304 
<a name="l04305"></a>04305   result = _dbus_connection_run_builtin_filters_unlocked_no_update (connection, message);
<a name="l04306"></a>04306   <span class="keywordflow">if</span> (result != <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1decb84b64c92055f2585fe9c29f1e5df68">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>)
<a name="l04307"></a>04307     <span class="keywordflow">goto</span> out;
<a name="l04308"></a>04308  
<a name="l04309"></a>04309   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusList.html#g1a85785891866750c9438bc10ad0350a">_dbus_list_copy</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, &amp;filter_list_copy))
<a name="l04310"></a>04310     {
<a name="l04311"></a>04311       _dbus_connection_release_dispatch (connection);
<a name="l04312"></a>04312       HAVE_LOCK_CHECK (connection);
<a name="l04313"></a>04313       
<a name="l04314"></a>04314       _dbus_connection_failed_pop (connection, message_link);
<a name="l04315"></a>04315 
<a name="l04316"></a>04316       <span class="comment">/* unlocks and calls user code */</span>
<a name="l04317"></a>04317       _dbus_connection_update_dispatch_status_and_unlock (connection,
<a name="l04318"></a>04318                                                           <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d25af20a035f29cfa67fb8d69fb693b685">DBUS_DISPATCH_NEED_MEMORY</a>);
<a name="l04319"></a>04319 
<a name="l04320"></a>04320       <span class="keywordflow">if</span> (pending)
<a name="l04321"></a>04321         <a class="code" href="group__DBusPendingCall.html#gf4f5bc83de558f8f26687ccb761e6d61">dbus_pending_call_unref</a> (pending);
<a name="l04322"></a>04322       <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l04323"></a>04323       
<a name="l04324"></a>04324       <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#ggbf250a32ff740b2a8c99136e0142d8d25af20a035f29cfa67fb8d69fb693b685">DBUS_DISPATCH_NEED_MEMORY</a>;
<a name="l04325"></a>04325     }
<a name="l04326"></a>04326   
<a name="l04327"></a>04327   <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&amp;filter_list_copy,
<a name="l04328"></a>04328                       (<a class="code" href="group__DBusInternalsUtils.html#gadf9d45082dd1c9f59d8420d13492669">DBusForeachFunction</a>)_dbus_message_filter_ref,
<a name="l04329"></a>04329                       <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04330"></a>04330 
<a name="l04331"></a>04331   <span class="comment">/* We're still protected from dispatch() reentrancy here</span>
<a name="l04332"></a>04332 <span class="comment">   * since we acquired the dispatcher</span>
<a name="l04333"></a>04333 <span class="comment">   */</span>
<a name="l04334"></a>04334   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04335"></a>04335   
<a name="l04336"></a>04336   link = <a class="code" href="group__DBusList.html#g1e26ce4fb4acb50593bd5ed2f4eeb3ae">_dbus_list_get_first_link</a> (&amp;filter_list_copy);
<a name="l04337"></a>04337   <span class="keywordflow">while</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04338"></a>04338     {
<a name="l04339"></a>04339       <a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *filter = link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l04340"></a>04340       <a class="code" href="structDBusList.html">DBusList</a> *next = <a class="code" href="group__DBusList.html#gede4ace46d5ee497d75074bfec4490a2">_dbus_list_get_next_link</a> (&amp;filter_list_copy, link);
<a name="l04341"></a>04341 
<a name="l04342"></a>04342       <span class="keywordflow">if</span> (filter-&gt;<a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04343"></a>04343         {
<a name="l04344"></a>04344           _dbus_verbose (<span class="stringliteral">"  filter was removed in a callback function\n"</span>);
<a name="l04345"></a>04345           link = next;
<a name="l04346"></a>04346           <span class="keywordflow">continue</span>;
<a name="l04347"></a>04347         }
<a name="l04348"></a>04348 
<a name="l04349"></a>04349       _dbus_verbose (<span class="stringliteral">"  running filter on message %p\n"</span>, message);
<a name="l04350"></a>04350       result = (* filter-&gt;<a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a>) (connection, message, filter-&gt;<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a>);
<a name="l04351"></a>04351 
<a name="l04352"></a>04352       <span class="keywordflow">if</span> (result != <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1decb84b64c92055f2585fe9c29f1e5df68">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>)
<a name="l04353"></a>04353         <span class="keywordflow">break</span>;
<a name="l04354"></a>04354 
<a name="l04355"></a>04355       link = next;
<a name="l04356"></a>04356     }
<a name="l04357"></a>04357 
<a name="l04358"></a>04358   <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&amp;filter_list_copy,
<a name="l04359"></a>04359                       (<a class="code" href="group__DBusInternalsUtils.html#gadf9d45082dd1c9f59d8420d13492669">DBusForeachFunction</a>)_dbus_message_filter_unref,
<a name="l04360"></a>04360                       <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04361"></a>04361   <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&amp;filter_list_copy);
<a name="l04362"></a>04362   
<a name="l04363"></a>04363   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04364"></a>04364 
<a name="l04365"></a>04365   <span class="keywordflow">if</span> (result == <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>)
<a name="l04366"></a>04366     {
<a name="l04367"></a>04367       _dbus_verbose (<span class="stringliteral">"No memory in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l04368"></a>04368       <span class="keywordflow">goto</span> out;
<a name="l04369"></a>04369     }
<a name="l04370"></a>04370   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (result == <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1deb6df40880a8f322694f14cd2804d3f76">DBUS_HANDLER_RESULT_HANDLED</a>)
<a name="l04371"></a>04371     {
<a name="l04372"></a>04372       _dbus_verbose (<span class="stringliteral">"filter handled message in dispatch\n"</span>);
<a name="l04373"></a>04373       <span class="keywordflow">goto</span> out;
<a name="l04374"></a>04374     }
<a name="l04375"></a>04375 
<a name="l04376"></a>04376   <span class="comment">/* We're still protected from dispatch() reentrancy here</span>
<a name="l04377"></a>04377 <span class="comment">   * since we acquired the dispatcher</span>
<a name="l04378"></a>04378 <span class="comment">   */</span>
<a name="l04379"></a>04379   _dbus_verbose (<span class="stringliteral">"  running object path dispatch on message %p (%d %s %s '%s')\n"</span>,
<a name="l04380"></a>04380                  message,
<a name="l04381"></a>04381                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message),
<a name="l04382"></a>04382                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) ?
<a name="l04383"></a>04383                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) :
<a name="l04384"></a>04384                  <span class="stringliteral">"no interface"</span>,
<a name="l04385"></a>04385                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) ?
<a name="l04386"></a>04386                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) :
<a name="l04387"></a>04387                  <span class="stringliteral">"no member"</span>,
<a name="l04388"></a>04388                  <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message));
<a name="l04389"></a>04389 
<a name="l04390"></a>04390   HAVE_LOCK_CHECK (connection);
<a name="l04391"></a>04391   result = <a class="code" href="group__DBusObjectTree.html#gb64dcc8febde768db3404cd93b333e1e">_dbus_object_tree_dispatch_and_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>,
<a name="l04392"></a>04392                                                   message);
<a name="l04393"></a>04393   
<a name="l04394"></a>04394   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04395"></a>04395 
<a name="l04396"></a>04396   <span class="keywordflow">if</span> (result != <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1decb84b64c92055f2585fe9c29f1e5df68">DBUS_HANDLER_RESULT_NOT_YET_HANDLED</a>)
<a name="l04397"></a>04397     {
<a name="l04398"></a>04398       _dbus_verbose (<span class="stringliteral">"object tree handled message in dispatch\n"</span>);
<a name="l04399"></a>04399       <span class="keywordflow">goto</span> out;
<a name="l04400"></a>04400     }
<a name="l04401"></a>04401 
<a name="l04402"></a>04402   <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message) == <a class="code" href="group__DBusProtocol.html#g09416afd76b65139eddd31e1085d9ebf">DBUS_MESSAGE_TYPE_METHOD_CALL</a>)
<a name="l04403"></a>04403     {
<a name="l04404"></a>04404       <a class="code" href="structDBusMessage.html">DBusMessage</a> *reply;
<a name="l04405"></a>04405       <a class="code" href="structDBusString.html">DBusString</a> str;
<a name="l04406"></a>04406       <a class="code" href="structDBusPreallocatedSend.html">DBusPreallocatedSend</a> *preallocated;
<a name="l04407"></a>04407 
<a name="l04408"></a>04408       _dbus_verbose (<span class="stringliteral">"  sending error %s\n"</span>,
<a name="l04409"></a>04409                      <a class="code" href="group__DBusProtocol.html#g46c7cbfa1806b0cccb56e9a7ca92f02b">DBUS_ERROR_UNKNOWN_METHOD</a>);
<a name="l04410"></a>04410       
<a name="l04411"></a>04411       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&amp;str))
<a name="l04412"></a>04412         {
<a name="l04413"></a>04413           result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04414"></a>04414           _dbus_verbose (<span class="stringliteral">"no memory for error string in dispatch\n"</span>);
<a name="l04415"></a>04415           <span class="keywordflow">goto</span> out;
<a name="l04416"></a>04416         }
<a name="l04417"></a>04417               
<a name="l04418"></a>04418       <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gb0078cf7e0e5bd784ec6d6e0cc3923a2">_dbus_string_append_printf</a> (&amp;str,
<a name="l04419"></a>04419                                        <span class="stringliteral">"Method \"%s\" with signature \"%s\" on interface \"%s\" doesn't exist\n"</span>,
<a name="l04420"></a>04420                                        <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message),
<a name="l04421"></a>04421                                        <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message),
<a name="l04422"></a>04422                                        <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message)))
<a name="l04423"></a>04423         {
<a name="l04424"></a>04424           <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&amp;str);
<a name="l04425"></a>04425           result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04426"></a>04426           _dbus_verbose (<span class="stringliteral">"no memory for error string in dispatch\n"</span>);
<a name="l04427"></a>04427           <span class="keywordflow">goto</span> out;
<a name="l04428"></a>04428         }
<a name="l04429"></a>04429       
<a name="l04430"></a>04430       reply = <a class="code" href="group__DBusMessage.html#g4b650525068ff3af73d22f803e70f494">dbus_message_new_error</a> (message,
<a name="l04431"></a>04431                                       <a class="code" href="group__DBusProtocol.html#g46c7cbfa1806b0cccb56e9a7ca92f02b">DBUS_ERROR_UNKNOWN_METHOD</a>,
<a name="l04432"></a>04432                                       _dbus_string_get_const_data (&amp;str));
<a name="l04433"></a>04433       <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&amp;str);
<a name="l04434"></a>04434 
<a name="l04435"></a>04435       <span class="keywordflow">if</span> (reply == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04436"></a>04436         {
<a name="l04437"></a>04437           result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04438"></a>04438           _dbus_verbose (<span class="stringliteral">"no memory for error reply in dispatch\n"</span>);
<a name="l04439"></a>04439           <span class="keywordflow">goto</span> out;
<a name="l04440"></a>04440         }
<a name="l04441"></a>04441       
<a name="l04442"></a>04442       preallocated = _dbus_connection_preallocate_send_unlocked (connection);
<a name="l04443"></a>04443 
<a name="l04444"></a>04444       <span class="keywordflow">if</span> (preallocated == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04445"></a>04445         {
<a name="l04446"></a>04446           <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (reply);
<a name="l04447"></a>04447           result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>;
<a name="l04448"></a>04448           _dbus_verbose (<span class="stringliteral">"no memory for error send in dispatch\n"</span>);
<a name="l04449"></a>04449           <span class="keywordflow">goto</span> out;
<a name="l04450"></a>04450         }
<a name="l04451"></a>04451 
<a name="l04452"></a>04452       _dbus_connection_send_preallocated_unlocked_no_update (connection, preallocated,
<a name="l04453"></a>04453                                                              reply, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04454"></a>04454 
<a name="l04455"></a>04455       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (reply);
<a name="l04456"></a>04456       
<a name="l04457"></a>04457       result = <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1deb6df40880a8f322694f14cd2804d3f76">DBUS_HANDLER_RESULT_HANDLED</a>;
<a name="l04458"></a>04458     }
<a name="l04459"></a>04459   
<a name="l04460"></a>04460   _dbus_verbose (<span class="stringliteral">"  done dispatching %p (%d %s %s '%s') on connection %p\n"</span>, message,
<a name="l04461"></a>04461                  <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message),
<a name="l04462"></a>04462                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) ?
<a name="l04463"></a>04463                  <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message) :
<a name="l04464"></a>04464                  <span class="stringliteral">"no interface"</span>,
<a name="l04465"></a>04465                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) ?
<a name="l04466"></a>04466                  <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message) :
<a name="l04467"></a>04467                  <span class="stringliteral">"no member"</span>,
<a name="l04468"></a>04468                  <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message),
<a name="l04469"></a>04469                  connection);
<a name="l04470"></a>04470   
<a name="l04471"></a>04471  out:
<a name="l04472"></a>04472   <span class="keywordflow">if</span> (result == <a class="code" href="group__DBusShared.html#gg8244b29230187624c24986c24edab1de01f00ce4578559c7b14b91256bfede7d">DBUS_HANDLER_RESULT_NEED_MEMORY</a>)
<a name="l04473"></a>04473     {
<a name="l04474"></a>04474       _dbus_verbose (<span class="stringliteral">"out of memory in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l04475"></a>04475       
<a name="l04476"></a>04476       <span class="comment">/* Put message back, and we'll start over.</span>
<a name="l04477"></a>04477 <span class="comment">       * Yes this means handlers must be idempotent if they</span>
<a name="l04478"></a>04478 <span class="comment">       * don't return HANDLED; c'est la vie.</span>
<a name="l04479"></a>04479 <span class="comment">       */</span>
<a name="l04480"></a>04480       _dbus_connection_putback_message_link_unlocked (connection,
<a name="l04481"></a>04481                                                       message_link);
<a name="l04482"></a>04482     }
<a name="l04483"></a>04483   <span class="keywordflow">else</span>
<a name="l04484"></a>04484     {
<a name="l04485"></a>04485       _dbus_verbose (<span class="stringliteral">" ... done dispatching in %s\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l04486"></a>04486       
<a name="l04487"></a>04487       <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (message_link);
<a name="l04488"></a>04488       <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message); <span class="comment">/* don't want the message to count in max message limits</span>
<a name="l04489"></a>04489 <span class="comment">                                     * in computing dispatch status below</span>
<a name="l04490"></a>04490 <span class="comment">                                     */</span>
<a name="l04491"></a>04491     }
<a name="l04492"></a>04492   
<a name="l04493"></a>04493   _dbus_connection_release_dispatch (connection);
<a name="l04494"></a>04494   HAVE_LOCK_CHECK (connection);
<a name="l04495"></a>04495 
<a name="l04496"></a>04496   _dbus_verbose (<span class="stringliteral">"%s before final status update\n"</span>, _DBUS_FUNCTION_NAME);
<a name="l04497"></a>04497   status = _dbus_connection_get_dispatch_status_unlocked (connection);
<a name="l04498"></a>04498 
<a name="l04499"></a>04499   <span class="comment">/* unlocks and calls user code */</span>
<a name="l04500"></a>04500   _dbus_connection_update_dispatch_status_and_unlock (connection, status);
<a name="l04501"></a>04501   
<a name="l04502"></a>04502   <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l04503"></a>04503   
<a name="l04504"></a>04504   <span class="keywordflow">return</span> status;
<a name="l04505"></a>04505 }
<a name="l04506"></a>04506 
<a name="l04566"></a>04566 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l04567"></a><a class="code" href="group__DBusConnection.html#g71e9a01114fcffe86b450d9b521a4540">04567</a> <a class="code" href="group__DBusConnection.html#g71e9a01114fcffe86b450d9b521a4540">dbus_connection_set_watch_functions</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l04568"></a>04568                                      <a class="code" href="group__DBusConnection.html#g985b712fc165afa66e5901859b68b9de">DBusAddWatchFunction</a>         add_function,
<a name="l04569"></a>04569                                      <a class="code" href="group__DBusConnection.html#g6a48c42c4bde24911cae7fda0d1f1589">DBusRemoveWatchFunction</a>      remove_function,
<a name="l04570"></a>04570                                      <a class="code" href="group__DBusConnection.html#gfa7e0f7856f8ebbe66475979ef54ed9e">DBusWatchToggledFunction</a>     toggled_function,
<a name="l04571"></a>04571                                      <span class="keywordtype">void</span>                        *data,
<a name="l04572"></a>04572                                      <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>             free_data_function)
<a name="l04573"></a>04573 {
<a name="l04574"></a>04574   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l04575"></a>04575   <a class="code" href="structDBusWatchList.html">DBusWatchList</a> *watches;
<a name="l04576"></a>04576 
<a name="l04577"></a>04577   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04578"></a>04578   
<a name="l04579"></a>04579   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04580"></a>04580 
<a name="l04581"></a>04581 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l04582"></a>04582 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04583"></a>04583     {
<a name="l04584"></a>04584       <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Re-entrant call to %s is not allowed\n"</span>,
<a name="l04585"></a>04585                                _DBUS_FUNCTION_NAME);
<a name="l04586"></a>04586       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l04587"></a>04587     }
<a name="l04588"></a>04588 <span class="preprocessor">#endif</span>
<a name="l04589"></a>04589 <span class="preprocessor"></span>  
<a name="l04590"></a>04590   <span class="comment">/* ref connection for slightly better reentrancy */</span>
<a name="l04591"></a>04591   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l04592"></a>04592 
<a name="l04593"></a>04593   <span class="comment">/* This can call back into user code, and we need to drop the</span>
<a name="l04594"></a>04594 <span class="comment">   * connection lock when it does. This is kind of a lame</span>
<a name="l04595"></a>04595 <span class="comment">   * way to do it.</span>
<a name="l04596"></a>04596 <span class="comment">   */</span>
<a name="l04597"></a>04597   watches = connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a>;
<a name="l04598"></a>04598   connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l04599"></a>04599   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04600"></a>04600 
<a name="l04601"></a>04601   retval = <a class="code" href="group__DBusWatchInternals.html#ge9ab8cf14f4191191e94183be9a031d9">_dbus_watch_list_set_functions</a> (watches,
<a name="l04602"></a>04602                                            add_function, remove_function,
<a name="l04603"></a>04603                                            toggled_function,
<a name="l04604"></a>04604                                            data, free_data_function);
<a name="l04605"></a>04605   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04606"></a>04606   connection-&gt;<a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = watches;
<a name="l04607"></a>04607   
<a name="l04608"></a>04608   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04609"></a>04609   <span class="comment">/* drop our paranoid refcount */</span>
<a name="l04610"></a>04610   <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l04611"></a>04611   
<a name="l04612"></a>04612   <span class="keywordflow">return</span> retval;
<a name="l04613"></a>04613 }
<a name="l04614"></a>04614 
<a name="l04648"></a>04648 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l04649"></a><a class="code" href="group__DBusConnection.html#g1e827990ea677cbe69ead0b3ccc4b91c">04649</a> <a class="code" href="group__DBusConnection.html#g1e827990ea677cbe69ead0b3ccc4b91c">dbus_connection_set_timeout_functions</a>   (<a class="code" href="structDBusConnection.html">DBusConnection</a>            *connection,
<a name="l04650"></a>04650                                          <a class="code" href="group__DBusConnection.html#g0f4e9f850546dfbe3a27edea05e5e590">DBusAddTimeoutFunction</a>     add_function,
<a name="l04651"></a>04651                                          <a class="code" href="group__DBusConnection.html#gb11e8c56bd8637deca1439be635f6ca7">DBusRemoveTimeoutFunction</a>  remove_function,
<a name="l04652"></a>04652                                          <a class="code" href="group__DBusConnection.html#g1e98eb88ce848204d419495be5e1d228">DBusTimeoutToggledFunction</a> toggled_function,
<a name="l04653"></a>04653                                          <span class="keywordtype">void</span>                      *data,
<a name="l04654"></a>04654                                          <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>           free_data_function)
<a name="l04655"></a>04655 {
<a name="l04656"></a>04656   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l04657"></a>04657   <a class="code" href="structDBusTimeoutList.html">DBusTimeoutList</a> *timeouts;
<a name="l04658"></a>04658 
<a name="l04659"></a>04659   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04660"></a>04660   
<a name="l04661"></a>04661   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04662"></a>04662 
<a name="l04663"></a>04663 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l04664"></a>04664 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04665"></a>04665     {
<a name="l04666"></a>04666       <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Re-entrant call to %s is not allowed\n"</span>,
<a name="l04667"></a>04667                                _DBUS_FUNCTION_NAME);
<a name="l04668"></a>04668       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l04669"></a>04669     }
<a name="l04670"></a>04670 <span class="preprocessor">#endif</span>
<a name="l04671"></a>04671 <span class="preprocessor"></span>  
<a name="l04672"></a>04672   <span class="comment">/* ref connection for slightly better reentrancy */</span>
<a name="l04673"></a>04673   <a class="code" href="group__DBusConnectionInternals.html#g7151f75b5d2308ec80cfe893aba72aa1">_dbus_connection_ref_unlocked</a> (connection);
<a name="l04674"></a>04674 
<a name="l04675"></a>04675   timeouts = connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a>;
<a name="l04676"></a>04676   connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l04677"></a>04677   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04678"></a>04678   
<a name="l04679"></a>04679   retval = <a class="code" href="group__DBusTimeoutInternals.html#g6760d1963b870b45f855501e38b49fd9">_dbus_timeout_list_set_functions</a> (timeouts,
<a name="l04680"></a>04680                                              add_function, remove_function,
<a name="l04681"></a>04681                                              toggled_function,
<a name="l04682"></a>04682                                              data, free_data_function);
<a name="l04683"></a>04683   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04684"></a>04684   connection-&gt;<a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = timeouts;
<a name="l04685"></a>04685   
<a name="l04686"></a>04686   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04687"></a>04687   <span class="comment">/* drop our paranoid refcount */</span>
<a name="l04688"></a>04688   <a class="code" href="group__DBusConnection.html#gce42c9247692e466fb6bdeab82ccddc4">dbus_connection_unref</a> (connection);
<a name="l04689"></a>04689 
<a name="l04690"></a>04690   <span class="keywordflow">return</span> retval;
<a name="l04691"></a>04691 }
<a name="l04692"></a>04692 
<a name="l04707"></a>04707 <span class="keywordtype">void</span>
<a name="l04708"></a><a class="code" href="group__DBusConnection.html#ge4b62a3933f61445c7a242966c6d0fa6">04708</a> <a class="code" href="group__DBusConnection.html#ge4b62a3933f61445c7a242966c6d0fa6">dbus_connection_set_wakeup_main_function</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>            *connection,
<a name="l04709"></a>04709                                           <a class="code" href="group__DBusConnection.html#g8d21e6bab0bbca3efd2c6d5acb53d468">DBusWakeupMainFunction</a>     wakeup_main_function,
<a name="l04710"></a>04710                                           <span class="keywordtype">void</span>                      *data,
<a name="l04711"></a>04711                                           <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>           free_data_function)
<a name="l04712"></a>04712 {
<a name="l04713"></a>04713   <span class="keywordtype">void</span> *old_data;
<a name="l04714"></a>04714   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> old_free_data;
<a name="l04715"></a>04715 
<a name="l04716"></a>04716   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04717"></a>04717   
<a name="l04718"></a>04718   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04719"></a>04719   old_data = connection-&gt;<a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">wakeup_main_data</a>;
<a name="l04720"></a>04720   old_free_data = connection-&gt;<a class="code" href="structDBusConnection.html#8da896126df262503431acd73638c917">free_wakeup_main_data</a>;
<a name="l04721"></a>04721 
<a name="l04722"></a>04722   connection-&gt;<a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a> = wakeup_main_function;
<a name="l04723"></a>04723   connection-&gt;<a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">wakeup_main_data</a> = data;
<a name="l04724"></a>04724   connection-&gt;<a class="code" href="structDBusConnection.html#8da896126df262503431acd73638c917">free_wakeup_main_data</a> = free_data_function;
<a name="l04725"></a>04725   
<a name="l04726"></a>04726   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04727"></a>04727 
<a name="l04728"></a>04728   <span class="comment">/* Callback outside the lock */</span>
<a name="l04729"></a>04729   <span class="keywordflow">if</span> (old_free_data)
<a name="l04730"></a>04730     (*old_free_data) (old_data);
<a name="l04731"></a>04731 }
<a name="l04732"></a>04732 
<a name="l04753"></a>04753 <span class="keywordtype">void</span>
<a name="l04754"></a><a class="code" href="group__DBusConnection.html#gdf6557742f6b8b0daefc609dfd542c48">04754</a> <a class="code" href="group__DBusConnection.html#gdf6557742f6b8b0daefc609dfd542c48">dbus_connection_set_dispatch_status_function</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>             *connection,
<a name="l04755"></a>04755                                               <a class="code" href="group__DBusConnection.html#gd888331dd2737769f669c5df779fe0ef">DBusDispatchStatusFunction</a>  function,
<a name="l04756"></a>04756                                               <span class="keywordtype">void</span>                       *data,
<a name="l04757"></a>04757                                               <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>            free_data_function)
<a name="l04758"></a>04758 {
<a name="l04759"></a>04759   <span class="keywordtype">void</span> *old_data;
<a name="l04760"></a>04760   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> old_free_data;
<a name="l04761"></a>04761 
<a name="l04762"></a>04762   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04763"></a>04763   
<a name="l04764"></a>04764   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04765"></a>04765   old_data = connection-&gt;<a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">dispatch_status_data</a>;
<a name="l04766"></a>04766   old_free_data = connection-&gt;<a class="code" href="structDBusConnection.html#71f8b1e2078c4edb98c62de1886dfb2a">free_dispatch_status_data</a>;
<a name="l04767"></a>04767 
<a name="l04768"></a>04768   connection-&gt;<a class="code" href="structDBusConnection.html#f6cbafdf80cd474c654fc226581900a2">dispatch_status_function</a> = function;
<a name="l04769"></a>04769   connection-&gt;<a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">dispatch_status_data</a> = data;
<a name="l04770"></a>04770   connection-&gt;<a class="code" href="structDBusConnection.html#71f8b1e2078c4edb98c62de1886dfb2a">free_dispatch_status_data</a> = free_data_function;
<a name="l04771"></a>04771   
<a name="l04772"></a>04772   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04773"></a>04773 
<a name="l04774"></a>04774   <span class="comment">/* Callback outside the lock */</span>
<a name="l04775"></a>04775   <span class="keywordflow">if</span> (old_free_data)
<a name="l04776"></a>04776     (*old_free_data) (old_data);
<a name="l04777"></a>04777 }
<a name="l04778"></a>04778 
<a name="l04798"></a>04798 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l04799"></a><a class="code" href="group__DBusConnection.html#g7444bf75c08e1499801792cae7fdfcb6">04799</a> <a class="code" href="group__DBusConnection.html#g7444bf75c08e1499801792cae7fdfcb6">dbus_connection_get_unix_fd</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l04800"></a>04800                              <span class="keywordtype">int</span>            *fd)
<a name="l04801"></a>04801 {
<a name="l04802"></a>04802   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04803"></a>04803   _dbus_return_val_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04804"></a>04804 
<a name="l04805"></a>04805 <span class="preprocessor">#ifdef DBUS_WIN</span>
<a name="l04806"></a>04806 <span class="preprocessor"></span>  <span class="comment">/* FIXME do this on a lower level */</span>
<a name="l04807"></a>04807   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l04808"></a>04808 <span class="preprocessor">#endif</span>
<a name="l04809"></a>04809 <span class="preprocessor"></span>  
<a name="l04810"></a>04810   <span class="keywordflow">return</span> <a class="code" href="group__DBusConnection.html#gc22ccbaed8d791f3c83d64f118eb9065">dbus_connection_get_socket</a>(connection, fd);
<a name="l04811"></a>04811 }
<a name="l04812"></a>04812 
<a name="l04828"></a>04828 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l04829"></a><a class="code" href="group__DBusConnection.html#gc22ccbaed8d791f3c83d64f118eb9065">04829</a> <a class="code" href="group__DBusConnection.html#gc22ccbaed8d791f3c83d64f118eb9065">dbus_connection_get_socket</a>(<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l04830"></a>04830                            <span class="keywordtype">int</span>                         *fd)
<a name="l04831"></a>04831 {
<a name="l04832"></a>04832   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l04833"></a>04833 
<a name="l04834"></a>04834   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04835"></a>04835   _dbus_return_val_if_fail (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04836"></a>04836   
<a name="l04837"></a>04837   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04838"></a>04838   
<a name="l04839"></a>04839   retval = <a class="code" href="group__DBusTransport.html#gc58d38eb19b39774f89271fc6472e087">_dbus_transport_get_socket_fd</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l04840"></a>04840                                           fd);
<a name="l04841"></a>04841 
<a name="l04842"></a>04842   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04843"></a>04843 
<a name="l04844"></a>04844   <span class="keywordflow">return</span> retval;
<a name="l04845"></a>04845 }
<a name="l04846"></a>04846 
<a name="l04847"></a>04847 
<a name="l04870"></a>04870 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l04871"></a><a class="code" href="group__DBusConnection.html#gc95c691d7a2c6d96d54cac740cd7068e">04871</a> <a class="code" href="group__DBusConnection.html#gc95c691d7a2c6d96d54cac740cd7068e">dbus_connection_get_unix_user</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l04872"></a>04872                                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *uid)
<a name="l04873"></a>04873 {
<a name="l04874"></a>04874   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> result;
<a name="l04875"></a>04875 
<a name="l04876"></a>04876   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04877"></a>04877   _dbus_return_val_if_fail (uid != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04878"></a>04878   
<a name="l04879"></a>04879   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04880"></a>04880 
<a name="l04881"></a>04881   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusTransport.html#g251ff6d644e1dc6d46c58705e6dcc787">_dbus_transport_get_is_authenticated</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>))
<a name="l04882"></a>04882     result = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l04883"></a>04883   <span class="keywordflow">else</span>
<a name="l04884"></a>04884     result = <a class="code" href="group__DBusTransport.html#gf3c4a47f73bd584a9fda1e5e7a825da9">_dbus_transport_get_unix_user</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l04885"></a>04885                                             uid);
<a name="l04886"></a>04886 
<a name="l04887"></a>04887 <span class="preprocessor">#ifdef DBUS_WIN</span>
<a name="l04888"></a>04888 <span class="preprocessor"></span>  <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!result);
<a name="l04889"></a>04889 <span class="preprocessor">#endif</span>
<a name="l04890"></a>04890 <span class="preprocessor"></span>  
<a name="l04891"></a>04891   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04892"></a>04892 
<a name="l04893"></a>04893   <span class="keywordflow">return</span> result;
<a name="l04894"></a>04894 }
<a name="l04895"></a>04895 
<a name="l04906"></a>04906 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l04907"></a><a class="code" href="group__DBusConnection.html#gfecab71a36da9400dc0bf537d9436e32">04907</a> <a class="code" href="group__DBusConnection.html#gfecab71a36da9400dc0bf537d9436e32">dbus_connection_get_unix_process_id</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l04908"></a>04908                                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *pid)
<a name="l04909"></a>04909 {
<a name="l04910"></a>04910   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> result;
<a name="l04911"></a>04911 
<a name="l04912"></a>04912   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04913"></a>04913   _dbus_return_val_if_fail (pid != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l04914"></a>04914   
<a name="l04915"></a>04915   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04916"></a>04916 
<a name="l04917"></a>04917   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusTransport.html#g251ff6d644e1dc6d46c58705e6dcc787">_dbus_transport_get_is_authenticated</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>))
<a name="l04918"></a>04918     result = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l04919"></a>04919   <span class="keywordflow">else</span>
<a name="l04920"></a>04920     result = <a class="code" href="group__DBusTransport.html#ge66bc81abe904a4b3ab32d8920c8fe1e">_dbus_transport_get_unix_process_id</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l04921"></a>04921                                                   pid);
<a name="l04922"></a>04922 <span class="preprocessor">#ifdef DBUS_WIN</span>
<a name="l04923"></a>04923 <span class="preprocessor"></span>  <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!result);
<a name="l04924"></a>04924 <span class="preprocessor">#endif</span>
<a name="l04925"></a>04925 <span class="preprocessor"></span>  
<a name="l04926"></a>04926   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04927"></a>04927 
<a name="l04928"></a>04928   <span class="keywordflow">return</span> result;
<a name="l04929"></a>04929 }
<a name="l04930"></a>04930 
<a name="l04953"></a>04953 <span class="keywordtype">void</span>
<a name="l04954"></a><a class="code" href="group__DBusConnection.html#gd5b08fdd0cf5f79ad4dc9243acfa181c">04954</a> <a class="code" href="group__DBusConnection.html#gd5b08fdd0cf5f79ad4dc9243acfa181c">dbus_connection_set_unix_user_function</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>             *connection,
<a name="l04955"></a>04955                                         <a class="code" href="group__DBusConnection.html#g141b80629859a4c154c793f08c33d687">DBusAllowUnixUserFunction</a>   function,
<a name="l04956"></a>04956                                         <span class="keywordtype">void</span>                       *data,
<a name="l04957"></a>04957                                         <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>            free_data_function)
<a name="l04958"></a>04958 {
<a name="l04959"></a>04959   <span class="keywordtype">void</span> *old_data = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l04960"></a>04960   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> old_free_function = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l04961"></a>04961 
<a name="l04962"></a>04962   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l04963"></a>04963   
<a name="l04964"></a>04964   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l04965"></a>04965   <a class="code" href="group__DBusTransport.html#g9f0ab472678a107c2ebe7f1da0754c44">_dbus_transport_set_unix_user_function</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l04966"></a>04966                                           function, data, free_data_function,
<a name="l04967"></a>04967                                           &amp;old_data, &amp;old_free_function);
<a name="l04968"></a>04968   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l04969"></a>04969 
<a name="l04970"></a>04970   <span class="keywordflow">if</span> (old_free_function != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l04971"></a>04971     (* old_free_function) (old_data);
<a name="l04972"></a>04972 }
<a name="l04973"></a>04973 
<a name="l05005"></a>05005 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05006"></a><a class="code" href="group__DBusConnection.html#gf170715e1039639948127ff259203754">05006</a> <a class="code" href="group__DBusConnection.html#gf170715e1039639948127ff259203754">dbus_connection_get_windows_user</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>             *connection,
<a name="l05007"></a>05007                                   <span class="keywordtype">char</span>                      **windows_sid_p)
<a name="l05008"></a>05008 {
<a name="l05009"></a>05009   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> result;
<a name="l05010"></a>05010 
<a name="l05011"></a>05011   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05012"></a>05012   _dbus_return_val_if_fail (windows_sid_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05013"></a>05013   
<a name="l05014"></a>05014   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05015"></a>05015 
<a name="l05016"></a>05016   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusTransport.html#g251ff6d644e1dc6d46c58705e6dcc787">_dbus_transport_get_is_authenticated</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>))
<a name="l05017"></a>05017     result = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05018"></a>05018   <span class="keywordflow">else</span>
<a name="l05019"></a>05019     result = <a class="code" href="group__DBusTransport.html#g3f4f4ce9eaef18567fd21f5c6a1fde99">_dbus_transport_get_windows_user</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l05020"></a>05020                                                windows_sid_p);
<a name="l05021"></a>05021 
<a name="l05022"></a>05022 <span class="preprocessor">#ifdef DBUS_UNIX</span>
<a name="l05023"></a>05023 <span class="preprocessor"></span>  <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!result);
<a name="l05024"></a>05024 <span class="preprocessor">#endif</span>
<a name="l05025"></a>05025 <span class="preprocessor"></span>  
<a name="l05026"></a>05026   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05027"></a>05027 
<a name="l05028"></a>05028   <span class="keywordflow">return</span> result;
<a name="l05029"></a>05029 }
<a name="l05030"></a>05030 
<a name="l05052"></a>05052 <span class="keywordtype">void</span>
<a name="l05053"></a><a class="code" href="group__DBusConnection.html#gf672a6f48e0982db326804b582a5197d">05053</a> <a class="code" href="group__DBusConnection.html#gf672a6f48e0982db326804b582a5197d">dbus_connection_set_windows_user_function</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l05054"></a>05054                                            <a class="code" href="group__DBusConnection.html#gf5c1e751b33a480c33f9141ad3ac75d9">DBusAllowWindowsUserFunction</a> function,
<a name="l05055"></a>05055                                            <span class="keywordtype">void</span>                        *data,
<a name="l05056"></a>05056                                            <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>             free_data_function)
<a name="l05057"></a>05057 {
<a name="l05058"></a>05058   <span class="keywordtype">void</span> *old_data = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05059"></a>05059   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> old_free_function = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05060"></a>05060 
<a name="l05061"></a>05061   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05062"></a>05062   
<a name="l05063"></a>05063   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05064"></a>05064   <a class="code" href="group__DBusTransport.html#gdbf528ef41efde73d0bc386d10b7f5b1">_dbus_transport_set_windows_user_function</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l05065"></a>05065                                              function, data, free_data_function,
<a name="l05066"></a>05066                                              &amp;old_data, &amp;old_free_function);
<a name="l05067"></a>05067   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05068"></a>05068 
<a name="l05069"></a>05069   <span class="keywordflow">if</span> (old_free_function != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l05070"></a>05070     (* old_free_function) (old_data);
<a name="l05071"></a>05071 }
<a name="l05072"></a>05072 
<a name="l05099"></a>05099 <span class="keywordtype">void</span>
<a name="l05100"></a><a class="code" href="group__DBusConnection.html#g6906ebb174b6a2b9779bb443f8447b35">05100</a> <a class="code" href="group__DBusConnection.html#g6906ebb174b6a2b9779bb443f8447b35">dbus_connection_set_allow_anonymous</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>             *connection,
<a name="l05101"></a>05101                                      <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>                 value)
<a name="l05102"></a>05102 {
<a name="l05103"></a>05103   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05104"></a>05104   
<a name="l05105"></a>05105   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05106"></a>05106   <a class="code" href="group__DBusTransport.html#g5f4bd7eb5621003595b75cb8033463cd">_dbus_transport_set_allow_anonymous</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>, value);
<a name="l05107"></a>05107   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05108"></a>05108 }
<a name="l05109"></a>05109 
<a name="l05127"></a>05127 <span class="keywordtype">void</span>
<a name="l05128"></a><a class="code" href="group__DBusConnection.html#g07ab3c57b1721042d2b18e2adecb0e65">05128</a> <a class="code" href="group__DBusConnection.html#g07ab3c57b1721042d2b18e2adecb0e65">dbus_connection_set_route_peer_messages</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>             *connection,
<a name="l05129"></a>05129                                          <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>                 value)
<a name="l05130"></a>05130 {
<a name="l05131"></a>05131   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05132"></a>05132   
<a name="l05133"></a>05133   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05134"></a>05134   connection-&gt;<a class="code" href="structDBusConnection.html#b13bc36d7e6f91995768277ecbd5482c">route_peer_messages</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l05135"></a>05135   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05136"></a>05136 }
<a name="l05137"></a>05137 
<a name="l05159"></a>05159 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05160"></a><a class="code" href="group__DBusConnection.html#ga5429cad2e821b7013f11886c679142e">05160</a> <a class="code" href="group__DBusConnection.html#ga5429cad2e821b7013f11886c679142e">dbus_connection_add_filter</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>            *connection,
<a name="l05161"></a>05161                             <a class="code" href="group__DBusConnection.html#g5cbcefc9b79af6e468eba14d0d7197b2">DBusHandleMessageFunction</a>  function,
<a name="l05162"></a>05162                             <span class="keywordtype">void</span>                      *user_data,
<a name="l05163"></a>05163                             <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>           free_data_function)
<a name="l05164"></a>05164 {
<a name="l05165"></a>05165   <a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *filter;
<a name="l05166"></a>05166   
<a name="l05167"></a>05167   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05168"></a>05168   _dbus_return_val_if_fail (function != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05169"></a>05169 
<a name="l05170"></a>05170   filter = <a class="code" href="group__DBusMemory.html#gba9d823abda7f4cadbaf5177d3b8b793">dbus_new0</a> (<a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a>, 1);
<a name="l05171"></a>05171   <span class="keywordflow">if</span> (filter == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l05172"></a>05172     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05173"></a>05173 
<a name="l05174"></a>05174   filter-&gt;<a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> = 1;
<a name="l05175"></a>05175   
<a name="l05176"></a>05176   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05177"></a>05177 
<a name="l05178"></a>05178   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusList.html#gd99045e79db46159babe69718f343053">_dbus_list_append</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>,
<a name="l05179"></a>05179                           filter))
<a name="l05180"></a>05180     {
<a name="l05181"></a>05181       _dbus_message_filter_unref (filter);
<a name="l05182"></a>05182       <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05183"></a>05183       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05184"></a>05184     }
<a name="l05185"></a>05185 
<a name="l05186"></a>05186   <span class="comment">/* Fill in filter after all memory allocated,</span>
<a name="l05187"></a>05187 <span class="comment">   * so we don't run the free_user_data_function</span>
<a name="l05188"></a>05188 <span class="comment">   * if the add_filter() fails</span>
<a name="l05189"></a>05189 <span class="comment">   */</span>
<a name="l05190"></a>05190   
<a name="l05191"></a>05191   filter-&gt;<a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> = function;
<a name="l05192"></a>05192   filter-&gt;<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a> = user_data;
<a name="l05193"></a>05193   filter-&gt;<a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a> = free_data_function;
<a name="l05194"></a>05194         
<a name="l05195"></a>05195   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05196"></a>05196   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l05197"></a>05197 }
<a name="l05198"></a>05198 
<a name="l05211"></a>05211 <span class="keywordtype">void</span>
<a name="l05212"></a><a class="code" href="group__DBusConnection.html#gadb0b10e18f6ed87e69b22fe6770b04c">05212</a> <a class="code" href="group__DBusConnection.html#gadb0b10e18f6ed87e69b22fe6770b04c">dbus_connection_remove_filter</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>            *connection,
<a name="l05213"></a>05213                                <a class="code" href="group__DBusConnection.html#g5cbcefc9b79af6e468eba14d0d7197b2">DBusHandleMessageFunction</a>  function,
<a name="l05214"></a>05214                                <span class="keywordtype">void</span>                      *user_data)
<a name="l05215"></a>05215 {
<a name="l05216"></a>05216   <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l05217"></a>05217   <a class="code" href="group__DBusConnectionInternals.html#gec8158f55878d1a6459ebdc9950fa783">DBusMessageFilter</a> *filter;
<a name="l05218"></a>05218   
<a name="l05219"></a>05219   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05220"></a>05220   _dbus_return_if_fail (function != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05221"></a>05221   
<a name="l05222"></a>05222   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05223"></a>05223 
<a name="l05224"></a>05224   filter = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05225"></a>05225   
<a name="l05226"></a>05226   link = <a class="code" href="group__DBusList.html#g42736fb02458bfffed948a509962c059">_dbus_list_get_last_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>);
<a name="l05227"></a>05227   <span class="keywordflow">while</span> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l05228"></a>05228     {
<a name="l05229"></a>05229       filter = link-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l05230"></a>05230 
<a name="l05231"></a>05231       <span class="keywordflow">if</span> (filter-&gt;<a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> == function &amp;&amp;
<a name="l05232"></a>05232           filter-&gt;<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a> == user_data)
<a name="l05233"></a>05233         {
<a name="l05234"></a>05234           <a class="code" href="group__DBusList.html#g40abea762d9cb44e5ec6b31b1769dc2e">_dbus_list_remove_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, link);
<a name="l05235"></a>05235           filter-&gt;<a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05236"></a>05236           
<a name="l05237"></a>05237           <span class="keywordflow">break</span>;
<a name="l05238"></a>05238         }
<a name="l05239"></a>05239         
<a name="l05240"></a>05240       link = <a class="code" href="group__DBusList.html#g6637493bf5fc09bddb44ac295c475cae">_dbus_list_get_prev_link</a> (&amp;connection-&gt;<a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, link);
<a name="l05241"></a>05241     }
<a name="l05242"></a>05242   
<a name="l05243"></a>05243   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05244"></a>05244 
<a name="l05245"></a>05245 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l05246"></a>05246 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (filter == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l05247"></a>05247     {
<a name="l05248"></a>05248       <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"Attempt to remove filter function %p user data %p, but no such filter has been added\n"</span>,
<a name="l05249"></a>05249                                function, user_data);
<a name="l05250"></a>05250       <span class="keywordflow">return</span>;
<a name="l05251"></a>05251     }
<a name="l05252"></a>05252 <span class="preprocessor">#endif</span>
<a name="l05253"></a>05253 <span class="preprocessor"></span>  
<a name="l05254"></a>05254   <span class="comment">/* Call application code */</span>
<a name="l05255"></a>05255   <span class="keywordflow">if</span> (filter-&gt;<a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>)
<a name="l05256"></a>05256     (* filter-&gt;<a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>) (filter-&gt;<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a>);
<a name="l05257"></a>05257 
<a name="l05258"></a>05258   filter-&gt;<a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05259"></a>05259   filter-&gt;<a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05260"></a>05260   
<a name="l05261"></a>05261   _dbus_message_filter_unref (filter);
<a name="l05262"></a>05262 }
<a name="l05263"></a>05263 
<a name="l05275"></a>05275 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05276"></a><a class="code" href="group__DBusConnection.html#g2fbfde4f6c28167a39c1e7dc41b866af">05276</a> <a class="code" href="group__DBusConnection.html#g2fbfde4f6c28167a39c1e7dc41b866af">dbus_connection_register_object_path</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l05277"></a>05277                                       <span class="keyword">const</span> <span class="keywordtype">char</span>                  *path,
<a name="l05278"></a>05278                                       <span class="keyword">const</span> <a class="code" href="structDBusObjectPathVTable.html">DBusObjectPathVTable</a>  *vtable,
<a name="l05279"></a>05279                                       <span class="keywordtype">void</span>                        *user_data)
<a name="l05280"></a>05280 {
<a name="l05281"></a>05281   <span class="keywordtype">char</span> **decomposed_path;
<a name="l05282"></a>05282   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l05283"></a>05283   
<a name="l05284"></a>05284   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05285"></a>05285   _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05286"></a>05286   _dbus_return_val_if_fail (path[0] == <span class="charliteral">'/'</span>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05287"></a>05287   _dbus_return_val_if_fail (vtable != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05288"></a>05288 
<a name="l05289"></a>05289   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusObjectTree.html#gb282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (path, strlen (path), &amp;decomposed_path, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l05290"></a>05290     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05291"></a>05291 
<a name="l05292"></a>05292   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05293"></a>05293 
<a name="l05294"></a>05294   retval = <a class="code" href="group__DBusObjectTree.html#ge8615fd56c31897732575d299edf00cc">_dbus_object_tree_register</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>,
<a name="l05295"></a>05295                                        <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>,
<a name="l05296"></a>05296                                        (<span class="keyword">const</span> <span class="keywordtype">char</span> **) decomposed_path, vtable,
<a name="l05297"></a>05297                                        user_data);
<a name="l05298"></a>05298 
<a name="l05299"></a>05299   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05300"></a>05300 
<a name="l05301"></a>05301   <a class="code" href="group__DBusMemory.html#g6d4674de64d806d238ffd309a486754e">dbus_free_string_array</a> (decomposed_path);
<a name="l05302"></a>05302 
<a name="l05303"></a>05303   <span class="keywordflow">return</span> retval;
<a name="l05304"></a>05304 }
<a name="l05305"></a>05305 
<a name="l05318"></a>05318 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05319"></a><a class="code" href="group__DBusConnection.html#g06adafcf5276e0f2fa03d45a979e92cf">05319</a> <a class="code" href="group__DBusConnection.html#g06adafcf5276e0f2fa03d45a979e92cf">dbus_connection_register_fallback</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l05320"></a>05320                                    <span class="keyword">const</span> <span class="keywordtype">char</span>                  *path,
<a name="l05321"></a>05321                                    <span class="keyword">const</span> <a class="code" href="structDBusObjectPathVTable.html">DBusObjectPathVTable</a>  *vtable,
<a name="l05322"></a>05322                                    <span class="keywordtype">void</span>                        *user_data)
<a name="l05323"></a>05323 {
<a name="l05324"></a>05324   <span class="keywordtype">char</span> **decomposed_path;
<a name="l05325"></a>05325   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l05326"></a>05326   
<a name="l05327"></a>05327   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05328"></a>05328   _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05329"></a>05329   _dbus_return_val_if_fail (path[0] == <span class="charliteral">'/'</span>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05330"></a>05330   _dbus_return_val_if_fail (vtable != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05331"></a>05331 
<a name="l05332"></a>05332   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusObjectTree.html#gb282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (path, strlen (path), &amp;decomposed_path, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l05333"></a>05333     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05334"></a>05334 
<a name="l05335"></a>05335   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05336"></a>05336 
<a name="l05337"></a>05337   retval = <a class="code" href="group__DBusObjectTree.html#ge8615fd56c31897732575d299edf00cc">_dbus_object_tree_register</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>,
<a name="l05338"></a>05338                                        <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>,
<a name="l05339"></a>05339                                        (<span class="keyword">const</span> <span class="keywordtype">char</span> **) decomposed_path, vtable,
<a name="l05340"></a>05340                                        user_data);
<a name="l05341"></a>05341 
<a name="l05342"></a>05342   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05343"></a>05343 
<a name="l05344"></a>05344   <a class="code" href="group__DBusMemory.html#g6d4674de64d806d238ffd309a486754e">dbus_free_string_array</a> (decomposed_path);
<a name="l05345"></a>05345 
<a name="l05346"></a>05346   <span class="keywordflow">return</span> retval;
<a name="l05347"></a>05347 }
<a name="l05348"></a>05348 
<a name="l05358"></a>05358 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05359"></a><a class="code" href="group__DBusConnection.html#g1b904229c98dfa48440cdf6864131da0">05359</a> <a class="code" href="group__DBusConnection.html#g1b904229c98dfa48440cdf6864131da0">dbus_connection_unregister_object_path</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l05360"></a>05360                                         <span class="keyword">const</span> <span class="keywordtype">char</span>                  *path)
<a name="l05361"></a>05361 {
<a name="l05362"></a>05362   <span class="keywordtype">char</span> **decomposed_path;
<a name="l05363"></a>05363 
<a name="l05364"></a>05364   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05365"></a>05365   _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05366"></a>05366   _dbus_return_val_if_fail (path[0] == <span class="charliteral">'/'</span>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05367"></a>05367 
<a name="l05368"></a>05368   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusObjectTree.html#gb282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (path, strlen (path), &amp;decomposed_path, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l05369"></a>05369       <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05370"></a>05370 
<a name="l05371"></a>05371   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05372"></a>05372 
<a name="l05373"></a>05373   <a class="code" href="group__DBusObjectTree.html#g3babe73ed342b6963997ef2efd73ef75">_dbus_object_tree_unregister_and_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>, (<span class="keyword">const</span> <span class="keywordtype">char</span> **) decomposed_path);
<a name="l05374"></a>05374 
<a name="l05375"></a>05375   <a class="code" href="group__DBusMemory.html#g6d4674de64d806d238ffd309a486754e">dbus_free_string_array</a> (decomposed_path);
<a name="l05376"></a>05376 
<a name="l05377"></a>05377   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l05378"></a>05378 }
<a name="l05379"></a>05379 
<a name="l05390"></a>05390 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05391"></a><a class="code" href="group__DBusConnection.html#gb774854a813d9e509a36afe8f5aee0f8">05391</a> <a class="code" href="group__DBusConnection.html#gb774854a813d9e509a36afe8f5aee0f8">dbus_connection_get_object_path_data</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l05392"></a>05392                                       <span class="keyword">const</span> <span class="keywordtype">char</span>     *path,
<a name="l05393"></a>05393                                       <span class="keywordtype">void</span>          **data_p)
<a name="l05394"></a>05394 {
<a name="l05395"></a>05395   <span class="keywordtype">char</span> **decomposed_path;
<a name="l05396"></a>05396 
<a name="l05397"></a>05397   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05398"></a>05398   _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05399"></a>05399   _dbus_return_val_if_fail (data_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05400"></a>05400 
<a name="l05401"></a>05401   *data_p = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l05402"></a>05402   
<a name="l05403"></a>05403   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusObjectTree.html#gb282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (path, strlen (path), &amp;decomposed_path, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l05404"></a>05404     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05405"></a>05405   
<a name="l05406"></a>05406   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05407"></a>05407 
<a name="l05408"></a>05408   *data_p = <a class="code" href="group__DBusObjectTree.html#g4cf5a5f35d2bd18b6fa8aa58ba6b5de4">_dbus_object_tree_get_user_data_unlocked</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>, (<span class="keyword">const</span> <span class="keywordtype">char</span>**) decomposed_path);
<a name="l05409"></a>05409 
<a name="l05410"></a>05410   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05411"></a>05411 
<a name="l05412"></a>05412   <a class="code" href="group__DBusMemory.html#g6d4674de64d806d238ffd309a486754e">dbus_free_string_array</a> (decomposed_path);
<a name="l05413"></a>05413 
<a name="l05414"></a>05414   <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l05415"></a>05415 }
<a name="l05416"></a>05416 
<a name="l05427"></a>05427 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05428"></a><a class="code" href="group__DBusConnection.html#gdd1096d2586655952291cb852018b5e9">05428</a> <a class="code" href="group__DBusConnection.html#gdd1096d2586655952291cb852018b5e9">dbus_connection_list_registered</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>              *connection,
<a name="l05429"></a>05429                                  <span class="keyword">const</span> <span class="keywordtype">char</span>                  *parent_path,
<a name="l05430"></a>05430                                  <span class="keywordtype">char</span>                      ***child_entries)
<a name="l05431"></a>05431 {
<a name="l05432"></a>05432   <span class="keywordtype">char</span> **decomposed_path;
<a name="l05433"></a>05433   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l05434"></a>05434   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05435"></a>05435   _dbus_return_val_if_fail (parent_path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05436"></a>05436   _dbus_return_val_if_fail (parent_path[0] == <span class="charliteral">'/'</span>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05437"></a>05437   _dbus_return_val_if_fail (child_entries != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05438"></a>05438 
<a name="l05439"></a>05439   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusObjectTree.html#gb282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (parent_path, strlen (parent_path), &amp;decomposed_path, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l05440"></a>05440     <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05441"></a>05441 
<a name="l05442"></a>05442   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05443"></a>05443 
<a name="l05444"></a>05444   retval = <a class="code" href="group__DBusObjectTree.html#gab7040bd1bf037d99e9bbb75d0869a2f">_dbus_object_tree_list_registered_and_unlock</a> (connection-&gt;<a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a>,
<a name="l05445"></a>05445                                                          (<span class="keyword">const</span> <span class="keywordtype">char</span> **) decomposed_path,
<a name="l05446"></a>05446                                                          child_entries);
<a name="l05447"></a>05447   <a class="code" href="group__DBusMemory.html#g6d4674de64d806d238ffd309a486754e">dbus_free_string_array</a> (decomposed_path);
<a name="l05448"></a>05448 
<a name="l05449"></a>05449   <span class="keywordflow">return</span> retval;
<a name="l05450"></a>05450 }
<a name="l05451"></a>05451 
<a name="l05452"></a>05452 <span class="keyword">static</span> <a class="code" href="structDBusDataSlotAllocator.html">DBusDataSlotAllocator</a> slot_allocator;
<a name="l05453"></a>05453 <a class="code" href="group__DBusInternalsUtils.html#gc8d22e9846ecc2845959082076de899b">_DBUS_DEFINE_GLOBAL_LOCK</a> (connection_slots);
<a name="l05454"></a>05454 
<a name="l05469"></a>05469 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05470"></a><a class="code" href="group__DBusConnection.html#g8d3ca0ee00a09d4b2f633765b23a6808">05470</a> <a class="code" href="group__DBusConnection.html#g8d3ca0ee00a09d4b2f633765b23a6808">dbus_connection_allocate_data_slot</a> (<a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> *slot_p)
<a name="l05471"></a>05471 {
<a name="l05472"></a>05472   <span class="keywordflow">return</span> <a class="code" href="group__DBusDataSlot.html#g941a12182e69c185bd27f6efbfbd0f86">_dbus_data_slot_allocator_alloc</a> (&amp;slot_allocator,
<a name="l05473"></a>05473                                           &amp;<a class="code" href="group__DBusInternalsUtils.html#gde571435b55fae64217f5142aa78ee8d">_DBUS_LOCK_NAME</a> (connection_slots),
<a name="l05474"></a>05474                                           slot_p);
<a name="l05475"></a>05475 }
<a name="l05476"></a>05476 
<a name="l05488"></a>05488 <span class="keywordtype">void</span>
<a name="l05489"></a><a class="code" href="group__DBusConnection.html#g69aa77284bd7088cd09f52f50f2700f4">05489</a> <a class="code" href="group__DBusConnection.html#g69aa77284bd7088cd09f52f50f2700f4">dbus_connection_free_data_slot</a> (<a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> *slot_p)
<a name="l05490"></a>05490 {
<a name="l05491"></a>05491   _dbus_return_if_fail (*slot_p &gt;= 0);
<a name="l05492"></a>05492   
<a name="l05493"></a>05493   <a class="code" href="group__DBusDataSlot.html#g059c50a24cd9fc984e918e6159841633">_dbus_data_slot_allocator_free</a> (&amp;slot_allocator, slot_p);
<a name="l05494"></a>05494 }
<a name="l05495"></a>05495 
<a name="l05509"></a>05509 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l05510"></a><a class="code" href="group__DBusConnection.html#g83ded444f945d66c2579891d176934be">05510</a> <a class="code" href="group__DBusConnection.html#g83ded444f945d66c2579891d176934be">dbus_connection_set_data</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>   *connection,
<a name="l05511"></a>05511                           <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a>      slot,
<a name="l05512"></a>05512                           <span class="keywordtype">void</span>             *data,
<a name="l05513"></a>05513                           <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a>  free_data_func)
<a name="l05514"></a>05514 {
<a name="l05515"></a>05515   <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> old_free_func;
<a name="l05516"></a>05516   <span class="keywordtype">void</span> *old_data;
<a name="l05517"></a>05517   <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l05518"></a>05518 
<a name="l05519"></a>05519   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05520"></a>05520   _dbus_return_val_if_fail (slot &gt;= 0, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l05521"></a>05521   
<a name="l05522"></a>05522   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05523"></a>05523 
<a name="l05524"></a>05524   retval = <a class="code" href="group__DBusDataSlot.html#gd2952f9f686d96e7114fc49ab7452e1a">_dbus_data_slot_list_set</a> (&amp;slot_allocator,
<a name="l05525"></a>05525                                      &amp;connection-&gt;<a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">slot_list</a>,
<a name="l05526"></a>05526                                      slot, data, free_data_func,
<a name="l05527"></a>05527                                      &amp;old_free_func, &amp;old_data);
<a name="l05528"></a>05528   
<a name="l05529"></a>05529   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05530"></a>05530 
<a name="l05531"></a>05531   <span class="keywordflow">if</span> (retval)
<a name="l05532"></a>05532     {
<a name="l05533"></a>05533       <span class="comment">/* Do the actual free outside the connection lock */</span>
<a name="l05534"></a>05534       <span class="keywordflow">if</span> (old_free_func)
<a name="l05535"></a>05535         (* old_free_func) (old_data);
<a name="l05536"></a>05536     }
<a name="l05537"></a>05537 
<a name="l05538"></a>05538   <span class="keywordflow">return</span> retval;
<a name="l05539"></a>05539 }
<a name="l05540"></a>05540 
<a name="l05549"></a>05549 <span class="keywordtype">void</span>*
<a name="l05550"></a><a class="code" href="group__DBusConnection.html#g9ea7bbc24387cf2a7d48c86f662acefd">05550</a> <a class="code" href="group__DBusConnection.html#g9ea7bbc24387cf2a7d48c86f662acefd">dbus_connection_get_data</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a>   *connection,
<a name="l05551"></a>05551                           <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a>      slot)
<a name="l05552"></a>05552 {
<a name="l05553"></a>05553   <span class="keywordtype">void</span> *res;
<a name="l05554"></a>05554 
<a name="l05555"></a>05555   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05556"></a>05556   
<a name="l05557"></a>05557   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05558"></a>05558 
<a name="l05559"></a>05559   res = <a class="code" href="group__DBusDataSlot.html#g43f741229f0c38788442601e2750ec66">_dbus_data_slot_list_get</a> (&amp;slot_allocator,
<a name="l05560"></a>05560                                   &amp;connection-&gt;<a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">slot_list</a>,
<a name="l05561"></a>05561                                   slot);
<a name="l05562"></a>05562   
<a name="l05563"></a>05563   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05564"></a>05564 
<a name="l05565"></a>05565   <span class="keywordflow">return</span> res;
<a name="l05566"></a>05566 }
<a name="l05567"></a>05567 
<a name="l05574"></a>05574 <span class="keywordtype">void</span>
<a name="l05575"></a><a class="code" href="group__DBusConnection.html#ga70e48639fa82a42577fb01a93354e3e">05575</a> <a class="code" href="group__DBusConnection.html#ga70e48639fa82a42577fb01a93354e3e">dbus_connection_set_change_sigpipe</a> (<a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> will_modify_sigpipe)
<a name="l05576"></a>05576 {  
<a name="l05577"></a>05577   _dbus_modify_sigpipe = will_modify_sigpipe != <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l05578"></a>05578 }
<a name="l05579"></a>05579 
<a name="l05588"></a>05588 <span class="keywordtype">void</span>
<a name="l05589"></a><a class="code" href="group__DBusConnection.html#g36dd6ca121c45a7dc2be95bdaea5c1f0">05589</a> <a class="code" href="group__DBusConnection.html#g36dd6ca121c45a7dc2be95bdaea5c1f0">dbus_connection_set_max_message_size</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l05590"></a>05590                                       <span class="keywordtype">long</span>            size)
<a name="l05591"></a>05591 {
<a name="l05592"></a>05592   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05593"></a>05593   
<a name="l05594"></a>05594   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05595"></a>05595   <a class="code" href="group__DBusTransport.html#g03ea875260e71f59af708146cabf95ab">_dbus_transport_set_max_message_size</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l05596"></a>05596                                         size);
<a name="l05597"></a>05597   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05598"></a>05598 }
<a name="l05599"></a>05599 
<a name="l05606"></a>05606 <span class="keywordtype">long</span>
<a name="l05607"></a><a class="code" href="group__DBusConnection.html#gb5baee52280709cef8658f7dac20e5b7">05607</a> <a class="code" href="group__DBusConnection.html#gb5baee52280709cef8658f7dac20e5b7">dbus_connection_get_max_message_size</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l05608"></a>05608 {
<a name="l05609"></a>05609   <span class="keywordtype">long</span> res;
<a name="l05610"></a>05610 
<a name="l05611"></a>05611   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
<a name="l05612"></a>05612   
<a name="l05613"></a>05613   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05614"></a>05614   res = <a class="code" href="group__DBusTransport.html#ge36d2a90bad6ef13c0379fa9864ff68e">_dbus_transport_get_max_message_size</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l05615"></a>05615   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05616"></a>05616   <span class="keywordflow">return</span> res;
<a name="l05617"></a>05617 }
<a name="l05618"></a>05618 
<a name="l05644"></a>05644 <span class="keywordtype">void</span>
<a name="l05645"></a><a class="code" href="group__DBusConnection.html#g10c04abb655d2938f46f15576a99e08c">05645</a> <a class="code" href="group__DBusConnection.html#g10c04abb655d2938f46f15576a99e08c">dbus_connection_set_max_received_size</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection,
<a name="l05646"></a>05646                                        <span class="keywordtype">long</span>            size)
<a name="l05647"></a>05647 {
<a name="l05648"></a>05648   _dbus_return_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l05649"></a>05649   
<a name="l05650"></a>05650   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05651"></a>05651   <a class="code" href="group__DBusTransport.html#g08e0368732df5f4e58a2c838fe4484f6">_dbus_transport_set_max_received_size</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l05652"></a>05652                                          size);
<a name="l05653"></a>05653   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05654"></a>05654 }
<a name="l05655"></a>05655 
<a name="l05662"></a>05662 <span class="keywordtype">long</span>
<a name="l05663"></a><a class="code" href="group__DBusConnection.html#ga5360c972104ce2c2823fe5c7cd0e101">05663</a> <a class="code" href="group__DBusConnection.html#ga5360c972104ce2c2823fe5c7cd0e101">dbus_connection_get_max_received_size</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l05664"></a>05664 {
<a name="l05665"></a>05665   <span class="keywordtype">long</span> res;
<a name="l05666"></a>05666 
<a name="l05667"></a>05667   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
<a name="l05668"></a>05668   
<a name="l05669"></a>05669   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05670"></a>05670   res = <a class="code" href="group__DBusTransport.html#g8992b33d9060a103bd38705462a0ea96">_dbus_transport_get_max_received_size</a> (connection-&gt;<a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>);
<a name="l05671"></a>05671   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05672"></a>05672   <span class="keywordflow">return</span> res;
<a name="l05673"></a>05673 }
<a name="l05674"></a>05674 
<a name="l05685"></a>05685 <span class="keywordtype">long</span>
<a name="l05686"></a><a class="code" href="group__DBusConnection.html#gbc94e2c43e3f16ae74b25d3f93cf7d4a">05686</a> <a class="code" href="group__DBusConnection.html#gbc94e2c43e3f16ae74b25d3f93cf7d4a">dbus_connection_get_outgoing_size</a> (<a class="code" href="structDBusConnection.html">DBusConnection</a> *connection)
<a name="l05687"></a>05687 {
<a name="l05688"></a>05688   <span class="keywordtype">long</span> res;
<a name="l05689"></a>05689 
<a name="l05690"></a>05690   _dbus_return_val_if_fail (connection != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
<a name="l05691"></a>05691   
<a name="l05692"></a>05692   <a class="code" href="group__DBusPendingCallInternals.html#g99fcbae5b8f2ed2cc019cab85f63d4e4">CONNECTION_LOCK</a> (connection);
<a name="l05693"></a>05693   res = <a class="code" href="group__DBusResources.html#g817729ebefbd486f816b24a1fefc889d">_dbus_counter_get_value</a> (connection-&gt;<a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>);
<a name="l05694"></a>05694   <a class="code" href="group__DBusPendingCallInternals.html#gb21a3014fa3cacf2a580e079321abc33">CONNECTION_UNLOCK</a> (connection);
<a name="l05695"></a>05695   <span class="keywordflow">return</span> res;
<a name="l05696"></a>05696 }
<a name="l05697"></a>05697 
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Dec 14 22:26:11 2009 for D-Bus by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>

Anon7 - 2021