|
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 : |
<!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 Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="pages.html"><span>Related 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 <config.h></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)->have_connection_lock); \</span>
<a name="l00052"></a>00052 <span class="preprocessor"> (connection)->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)->have_connection_lock); \</span>
<a name="l00056"></a>00056 <span class="preprocessor"> (connection)->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)->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)->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)->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->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-><a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 0);
<a name="l00328"></a>00328 <a class="code" href="group__DBusSysdeps.html#ge74c3fcf12acaeccdb152ef907de951c">_dbus_atomic_inc</a> (&filter-><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-><a class="code" href="structDBusMessageFilter.html#2d2debd9a708cb7d4f8447c18f7458b9">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 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> (&filter-><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-><a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>)
<a name="l00341"></a>00341 (* filter-><a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>) (filter-><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-><a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a>)
<a name="l00380"></a>00380 (*connection-><a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a>) (connection-><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-><a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>;
<a name="l00431"></a>00431 *dispatch_mutex_loc = connection-><a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>;
<a name="l00432"></a>00432 *io_path_mutex_loc = connection-><a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>;
<a name="l00433"></a>00433 *dispatch_cond_loc = connection-><a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>;
<a name="l00434"></a>00434 *io_path_cond_loc = connection-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l00457"></a>00457 link);
<a name="l00458"></a>00458 message = link-><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-><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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>, link);
<a name="l00514"></a>00514
<a name="l00515"></a>00515 connection-><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-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>, connection, connection-><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-><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> (&connection-><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> (&connection-><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-><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> (&connection-><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> (&connection-><a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>, link);
<a name="l00605"></a>00605
<a name="l00606"></a>00606 connection-><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-><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-><a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>,
<a name="l00625"></a>00625 &link);
<a name="l00626"></a>00626 <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&connection-><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-><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-><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-><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-><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-><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-><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->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-><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-><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-><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->io_path_acquired = %d timeout = %d\n"</span>,
<a name="l01014"></a>01014 _DBUS_FUNCTION_NAME, connection-><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-><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-><a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>,
<a name="l01026"></a>01026 connection-><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-><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-><a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>,
<a name="l01045"></a>01045 connection-><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-><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-><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->io_path_acquired = %d we_acquired = %d\n"</span>,
<a name="l01057"></a>01057 _DBUS_FUNCTION_NAME, connection-><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-><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-><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-><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->io_path_acquired = %d\n"</span>,
<a name="l01089"></a>01089 _DBUS_FUNCTION_NAME, connection-><a class="code" href="structDBusConnection.html#9f71e445534a4405075c33b5a075589f">io_path_acquired</a>);
<a name="l01090"></a>01090
<a name="l01091"></a>01091 connection-><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-><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-><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-><a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> == 0)
<a name="l01136"></a>01136 flags &= ~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 & 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->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> (&connection-><a class="code" href="structDBusConnection.html#b5726e8d3ff6b08910899b7fe6d7293e">mutex</a>);
<a name="l01203"></a>01203 <span class="keywordflow">if</span> (connection-><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> (&connection-><a class="code" href="structDBusConnection.html#0dfeaf376073e91b370742869762c353">io_path_mutex</a>);
<a name="l01207"></a>01207 <span class="keywordflow">if</span> (connection-><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> (&connection-><a class="code" href="structDBusConnection.html#11da240f65887a91f39770c9c2b28685">dispatch_mutex</a>);
<a name="l01211"></a>01211 <span class="keywordflow">if</span> (connection-><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> (&connection-><a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>);
<a name="l01215"></a>01215 <span class="keywordflow">if</span> (connection-><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> (&connection-><a class="code" href="structDBusConnection.html#6d87e03eea7aaff53f5574efcfb8c3e4">io_path_cond</a>);
<a name="l01219"></a>01219 <span class="keywordflow">if</span> (connection-><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-><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-><a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a> = transport;
<a name="l01246"></a>01246 connection-><a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a> = watch_list;
<a name="l01247"></a>01247 connection-><a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a> = timeout_list;
<a name="l01248"></a>01248 connection-><a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a> = pending_replies;
<a name="l01249"></a>01249 connection-><a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a> = outgoing_counter;
<a name="l01250"></a>01250 connection-><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-><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-><a class="code" href="structDBusConnection.html#cd289771721a459f4f9cdeaca0fa87c2">objects</a> = objects;
<a name="l01253"></a>01253 connection-><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-><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-><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-><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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#0f805edcd9c09aaf45974510403dccbd">slot_list</a>);
<a name="l01264"></a>01264
<a name="l01265"></a>01265 connection-><a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a> = 1;
<a name="l01266"></a>01266
<a name="l01267"></a>01267 connection-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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-><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> (&connection-><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-><a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 0);
<a name="l01337"></a>01337 connection-><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> (&connection-><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-><a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 0);
<a name="l01366"></a>01366
<a name="l01367"></a>01367 connection-><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-><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-><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-><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-><a class="code" href="structDBusConnection.html#43d0bb9401103383e13ed3c99baf0daa">client_serial</a> < 0)
<a name="l01386"></a>01386 connection-><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-><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)) > 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, &iter);
<a name="l01457"></a>01457 <a class="code" href="group__DBusHashTable.html#g723e61fcc91ca673e90ff872c07ea19c">_dbus_hash_iter_next</a> (&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> (&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) < 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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusConnection.html#d1abb7ad98db87f32b4abda22df075bd">server_guid</a>);
<a name="l01654"></a>01654 connection-><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-><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, &entries, &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> (&tmp_error);
<a name="l01729"></a>01729 <a class="code" href="group__DBusErrors.html#g8ce28eae754237703296599967d7ab77">dbus_error_init</a> (&first_error);
<a name="l01730"></a>01730 <span class="keywordflow">for</span> (i = 0; i < 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], &connection))
<a name="l01735"></a>01735 _DBUS_SET_OOM (&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 &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> && 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-><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 (&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 (&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> (&tmp_error, &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> (&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 (&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 (&first_error);
<a name="l01783"></a>01783 <a class="code" href="group__DBusErrors.html#g9857517c813b19ef87b12f00558cecda">dbus_move_error</a> (&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> (&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-><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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>);
<a name="l01827"></a>01827 preallocated-><a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>-><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-><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-><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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#cecb9b77a9f7f234f41aa87c96cc49f9">link_cache</a>);
<a name="l01840"></a>01840 preallocated-><a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a> = connection-><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-><a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a> = <a class="code" href="group__DBusList.html#gc20b9981531cef590d49a59240344cd8">_dbus_list_alloc_link</a> (connection-><a class="code" href="structDBusConnection.html#5dcb660883904035076579c6d2f46501">outgoing_counter</a>);
<a name="l01845"></a>01845 <span class="keywordflow">if</span> (preallocated-><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-><a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>);
<a name="l01850"></a>01850
<a name="l01851"></a>01851 preallocated-><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-><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-><a class="code" href="structDBusPreallocatedSend.html#e164fe13f866bebbd714b526104c5bff">queue_link</a>-><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> (&connection-><a class="code" href="structDBusConnection.html#714fd51af8730c367b079594c7f756ae">outgoing_messages</a>,
<a name="l01875"></a>01875 preallocated-><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-><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-><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-><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-><a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> > 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-><a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 0);
<a name="l02022"></a>02022
<a name="l02023"></a>02023 <span class="keywordflow">if</span> (connection-><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 < 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 <= 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, &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> (&iter,
<a name="l02085"></a>02085 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02086"></a>02086 &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> (&connection-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>, link);
<a name="l02119"></a>02119 connection-><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> (&connection-><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-><a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>) > 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-><a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>, &iter);
<a name="l02142"></a>02142 <a class="code" href="group__DBusHashTable.html#g723e61fcc91ca673e90ff872c07ea19c">_dbus_hash_iter_next</a> (&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> (&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> (&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> (&start_tv_sec, &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> (&tv_sec, &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 < 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->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 < end_tv_sec ||
<a name="l02318"></a>02318 (tv_sec == end_tv_sec && tv_usec < 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 >= 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-><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> (&connection-><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-><a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 0);
<a name="l02478"></a>02478
<a name="l02479"></a>02479 connection-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a>);
<a name="l02526"></a>02526 connection-><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-><a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a>);
<a name="l02529"></a>02529 connection-><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> (&connection-><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> (&connection-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, link);
<a name="l02538"></a>02538
<a name="l02539"></a>02539 filter-><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-><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> (&connection-><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-><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-><a class="code" href="structDBusConnection.html#d8fa077f91fe62d0c10862e2ff9e86ca">pending_replies</a>);
<a name="l02552"></a>02552 connection-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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-><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-><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-><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-><a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>-><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-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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> (&connection-><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-><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> (&connection-><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-><a class="code" href="structDBusConnection.html#6fbf0227071fc20ffd5b0e79aef58e92">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> > 0);
<a name="l02627"></a>02627
<a name="l02628"></a>02628 connection-><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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusPreallocatedSend.html#ae6c1bd98f78491482d5f59b6ef138d4">counter_link</a>-><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-><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-><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> &&
<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 >= 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 >= 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 &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-><a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> > 0 &&
<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 && 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-><a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> == 0 &&
<a name="l03409"></a>03409 connection-><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 >= 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 >= 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-><a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> &&
<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-><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-><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-><a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a> = <a class="code" href="group__DBusList.html#g254e18f698f5fc518bde031e723e67c6">_dbus_list_get_first</a> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l03557"></a>03557
<a name="l03558"></a>03558 message = connection-><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-><a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03590"></a>03590 _dbus_return_if_fail (connection-><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-><a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03595"></a>03595
<a name="l03596"></a>03596 connection-><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-><a class="code" href="structDBusConnection.html#ef492b411cd2ebd214f8e4dd15e154af">message_borrowed</a>);
<a name="l03623"></a>03623 _dbus_return_if_fail (connection-><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-><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> (&connection-><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-><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-><a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a>);
<a name="l03636"></a>03636
<a name="l03637"></a>03637 connection-><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-><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-><a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> > 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> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>);
<a name="l03660"></a>03660 connection-><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-><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-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>),
<a name="l03675"></a>03675 connection, connection-><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-><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-><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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l03724"></a>03724 message_link);
<a name="l03725"></a>03725 connection-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>),
<a name="l03737"></a>03737 connection, connection-><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-><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-><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-><a class="code" href="structDBusConnection.html#201f92bbc0947b503a36eaff9ae0ede9">dispatch_cond</a>,
<a name="l03812"></a>03812 connection-><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-><a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03816"></a>03816
<a name="l03817"></a>03817 connection-><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-><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-><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-><a class="code" href="structDBusConnection.html#11803a01d74d956ef37e6aa092f0cf17">dispatch_acquired</a>);
<a name="l03842"></a>03842
<a name="l03843"></a>03843 connection-><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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#acb3a29956aa7712db37916194fde869">incoming_messages</a>,
<a name="l03855"></a>03855 message_link);
<a name="l03856"></a>03856 connection-><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-><a class="code" href="structDBusConnection.html#07025e177949c5e65d5f983ac5f5e878">n_outgoing</a> > 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-><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> (&connection-><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-><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-><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-><a class="code" href="structDBusConnection.html#a70afc41f6184604c027e7f71a314d7f">disconnect_message_link</a>);
<a name="l03912"></a>03912 connection-><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-><a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> > 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-><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-><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-><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-><a class="code" href="structDBusConnection.html#9bda45f2d5c9af5c187fc31d7c98b424">n_incoming</a> > 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-><a class="code" href="structDBusConnection.html#f3bbd2ecba171ebb8e952eaa030971d7">last_dispatch_status</a>;
<a name="l03981"></a>03981
<a name="l03982"></a>03982 connection-><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-><a class="code" href="structDBusConnection.html#f6cbafdf80cd474c654fc226581900a2">dispatch_status_function</a>;
<a name="l03985"></a>03985 data = connection-><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-><a class="code" href="structDBusConnection.html#48d141d4311211e921571043bdbaeefb">disconnected_message_arrived</a> &&
<a name="l03988"></a>03988 !connection-><a class="code" href="structDBusConnection.html#3b2707b9d10d0643f91a8e027ae118b5">disconnected_message_processed</a>)
<a name="l03989"></a>03989 {
<a name="l03990"></a>03990 connection-><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-><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 && 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-><a class="code" href="structDBusConnection.html#b13bc36d7e6f91995768277ecbd5482c">route_peer_messages</a> && <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> (&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> (&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 (&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>, &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> (&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-><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-><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> (&connection-><a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, &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> (&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> (&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-><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> (&filter_list_copy, link);
<a name="l04341"></a>04341
<a name="l04342"></a>04342 <span class="keywordflow">if</span> (filter-><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-><a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a>) (connection, message, filter-><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> (&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> (&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-><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> (&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> (&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> (&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 (&str));
<a name="l04433"></a>04433 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&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-><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-><a class="code" href="structDBusConnection.html#bdb6a32972d924531fb2cd80c7fd6d37">watches</a>;
<a name="l04598"></a>04598 connection-><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-><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-><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-><a class="code" href="structDBusConnection.html#f3936ac5c968f2ac09bf05cf36025994">timeouts</a>;
<a name="l04676"></a>04676 connection-><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-><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-><a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">wakeup_main_data</a>;
<a name="l04720"></a>04720 old_free_data = connection-><a class="code" href="structDBusConnection.html#8da896126df262503431acd73638c917">free_wakeup_main_data</a>;
<a name="l04721"></a>04721
<a name="l04722"></a>04722 connection-><a class="code" href="structDBusConnection.html#211104e37f65d45ab8fcb149e4bcc84e">wakeup_main_function</a> = wakeup_main_function;
<a name="l04723"></a>04723 connection-><a class="code" href="structDBusConnection.html#c8aff7bafd9ed046d835c5ed80bc218c">wakeup_main_data</a> = data;
<a name="l04724"></a>04724 connection-><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-><a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">dispatch_status_data</a>;
<a name="l04766"></a>04766 old_free_data = connection-><a class="code" href="structDBusConnection.html#71f8b1e2078c4edb98c62de1886dfb2a">free_dispatch_status_data</a>;
<a name="l04767"></a>04767
<a name="l04768"></a>04768 connection-><a class="code" href="structDBusConnection.html#f6cbafdf80cd474c654fc226581900a2">dispatch_status_function</a> = function;
<a name="l04769"></a>04769 connection-><a class="code" href="structDBusConnection.html#0225f7934d1bd118ae2eeacf8a1c6f19">dispatch_status_data</a> = data;
<a name="l04770"></a>04770 connection-><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-><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-><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-><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-><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-><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-><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-><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-><a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l04966"></a>04966 function, data, free_data_function,
<a name="l04967"></a>04967 &old_data, &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-><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-><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-><a class="code" href="structDBusConnection.html#9855f1d7d5404770dd4aa09239c70b3b">transport</a>,
<a name="l05065"></a>05065 function, data, free_data_function,
<a name="l05066"></a>05066 &old_data, &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-><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-><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-><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> (&connection-><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-><a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> = function;
<a name="l05192"></a>05192 filter-><a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a> = user_data;
<a name="l05193"></a>05193 filter-><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> (&connection-><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-><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-><a class="code" href="structDBusMessageFilter.html#56b3643122277ed5dc3d4f07793617fa">function</a> == function &&
<a name="l05232"></a>05232 filter-><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> (&connection-><a class="code" href="structDBusConnection.html#32d14cefcb4daea257544397755d45ed">filter_list</a>, link);
<a name="l05235"></a>05235 filter-><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> (&connection-><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-><a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>)
<a name="l05256"></a>05256 (* filter-><a class="code" href="structDBusMessageFilter.html#915f3269a91ee41d963448dcb22d92cd">free_user_data_function</a>) (filter-><a class="code" href="structDBusMessageFilter.html#6cf5321325828e39da1cc8fa1b3d7153">user_data</a>);
<a name="l05257"></a>05257
<a name="l05258"></a>05258 filter-><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-><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), &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-><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), &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-><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), &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-><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), &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-><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), &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-><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> (&slot_allocator,
<a name="l05473"></a>05473 &<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 >= 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> (&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 >= 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> (&slot_allocator,
<a name="l05525"></a>05525 &connection-><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 &old_free_func, &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> (&slot_allocator,
<a name="l05560"></a>05560 &connection-><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-><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-><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-><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-><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-><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
<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>