15e8dce4dSJason Molenda //===-- SBQueue.cpp ---------------------------------------------*- C++ -*-===// 25e8dce4dSJason Molenda // 35e8dce4dSJason Molenda // The LLVM Compiler Infrastructure 45e8dce4dSJason Molenda // 55e8dce4dSJason Molenda // This file is distributed under the University of Illinois Open Source 65e8dce4dSJason Molenda // License. See LICENSE.TXT for details. 75e8dce4dSJason Molenda // 85e8dce4dSJason Molenda //===----------------------------------------------------------------------===// 95e8dce4dSJason Molenda 105e8dce4dSJason Molenda #include "lldb/lldb-python.h" 115e8dce4dSJason Molenda 12*da0fc76eSVirgile Bello #include <inttypes.h> 13*da0fc76eSVirgile Bello 145e8dce4dSJason Molenda #include "lldb/API/SBQueue.h" 155e8dce4dSJason Molenda 165e8dce4dSJason Molenda #include "lldb/API/SBProcess.h" 175e8dce4dSJason Molenda #include "lldb/API/SBThread.h" 185e8dce4dSJason Molenda #include "lldb/Core/Log.h" 195e8dce4dSJason Molenda #include "lldb/Target/Process.h" 205e8dce4dSJason Molenda #include "lldb/Target/Queue.h" 215e8dce4dSJason Molenda #include "lldb/Target/QueueItem.h" 225e8dce4dSJason Molenda #include "lldb/Target/Thread.h" 235e8dce4dSJason Molenda 245e8dce4dSJason Molenda using namespace lldb; 255e8dce4dSJason Molenda using namespace lldb_private; 265e8dce4dSJason Molenda 27c8064ac6SJason Molenda namespace lldb_private 28c8064ac6SJason Molenda { 29c8064ac6SJason Molenda 30c8064ac6SJason Molenda class QueueImpl 31c8064ac6SJason Molenda { 32c8064ac6SJason Molenda public: 33c8064ac6SJason Molenda QueueImpl () : 345e8dce4dSJason Molenda m_queue_wp(), 355e8dce4dSJason Molenda m_threads(), 365e8dce4dSJason Molenda m_thread_list_fetched(false), 372fd83355SJason Molenda m_pending_items(), 382fd83355SJason Molenda m_pending_items_fetched(false) 395e8dce4dSJason Molenda { 405e8dce4dSJason Molenda } 415e8dce4dSJason Molenda 42c8064ac6SJason Molenda QueueImpl (const lldb::QueueSP &queue_sp) : 43b97f44d9SJason Molenda m_queue_wp(), 445e8dce4dSJason Molenda m_threads(), 455e8dce4dSJason Molenda m_thread_list_fetched(false), 462fd83355SJason Molenda m_pending_items(), 472fd83355SJason Molenda m_pending_items_fetched(false) 485e8dce4dSJason Molenda { 49b97f44d9SJason Molenda m_queue_wp = queue_sp; 505e8dce4dSJason Molenda } 515e8dce4dSJason Molenda 52c8064ac6SJason Molenda QueueImpl (const QueueImpl &rhs) 535e8dce4dSJason Molenda { 54c8064ac6SJason Molenda if (&rhs == this) 55c8064ac6SJason Molenda return; 56c8064ac6SJason Molenda m_queue_wp = rhs.m_queue_wp; 57c8064ac6SJason Molenda m_threads = rhs.m_threads; 58c8064ac6SJason Molenda m_thread_list_fetched = rhs.m_thread_list_fetched; 592fd83355SJason Molenda m_pending_items = rhs.m_pending_items; 602fd83355SJason Molenda m_pending_items_fetched = rhs.m_pending_items_fetched; 61c8064ac6SJason Molenda } 62c8064ac6SJason Molenda 63c8064ac6SJason Molenda ~QueueImpl () 64c8064ac6SJason Molenda { 655e8dce4dSJason Molenda } 665e8dce4dSJason Molenda 675e8dce4dSJason Molenda bool 68c8064ac6SJason Molenda IsValid () 695e8dce4dSJason Molenda { 70c8064ac6SJason Molenda return m_queue_wp.lock() != NULL; 715e8dce4dSJason Molenda } 725e8dce4dSJason Molenda 735e8dce4dSJason Molenda void 74c8064ac6SJason Molenda Clear () 755e8dce4dSJason Molenda { 765e8dce4dSJason Molenda m_queue_wp.reset(); 775e8dce4dSJason Molenda m_thread_list_fetched = false; 785e8dce4dSJason Molenda m_threads.clear(); 792fd83355SJason Molenda m_pending_items_fetched = false; 802fd83355SJason Molenda m_pending_items.clear(); 815e8dce4dSJason Molenda } 825e8dce4dSJason Molenda 835e8dce4dSJason Molenda void 84c8064ac6SJason Molenda SetQueue (const lldb::QueueSP &queue_sp) 855e8dce4dSJason Molenda { 86c8064ac6SJason Molenda Clear(); 875e8dce4dSJason Molenda m_queue_wp = queue_sp; 885e8dce4dSJason Molenda } 895e8dce4dSJason Molenda 905e8dce4dSJason Molenda lldb::queue_id_t 91c8064ac6SJason Molenda GetQueueID () const 925e8dce4dSJason Molenda { 93c8064ac6SJason Molenda lldb::queue_id_t result = LLDB_INVALID_QUEUE_ID; 94c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 955e8dce4dSJason Molenda if (queue_sp) 965e8dce4dSJason Molenda { 975e8dce4dSJason Molenda result = queue_sp->GetID(); 985e8dce4dSJason Molenda } 995e8dce4dSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1005e8dce4dSJason Molenda if (log) 1015e8dce4dSJason Molenda log->Printf ("SBQueue(%p)::GetQueueID () => 0x%" PRIx64, this, result); 1025e8dce4dSJason Molenda return result; 1035e8dce4dSJason Molenda } 1045e8dce4dSJason Molenda 1055e8dce4dSJason Molenda uint32_t 106c8064ac6SJason Molenda GetIndexID () const 1075e8dce4dSJason Molenda { 1085e8dce4dSJason Molenda uint32_t result = LLDB_INVALID_INDEX32; 109c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 1105e8dce4dSJason Molenda if (queue_sp) 1115e8dce4dSJason Molenda { 1125e8dce4dSJason Molenda result = queue_sp->GetIndexID(); 1135e8dce4dSJason Molenda } 1145e8dce4dSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1155e8dce4dSJason Molenda if (log) 116c8064ac6SJason Molenda log->Printf ("SBQueueImpl(%p)::GetIndexID () => %d", this, result); 1175e8dce4dSJason Molenda return result; 1185e8dce4dSJason Molenda } 1195e8dce4dSJason Molenda 1205e8dce4dSJason Molenda const char * 121c8064ac6SJason Molenda GetName () const 1225e8dce4dSJason Molenda { 1235e8dce4dSJason Molenda const char *name = NULL; 124c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock (); 1255e8dce4dSJason Molenda if (queue_sp.get()) 1265e8dce4dSJason Molenda { 1275e8dce4dSJason Molenda name = queue_sp->GetName(); 1285e8dce4dSJason Molenda } 1295e8dce4dSJason Molenda 1305e8dce4dSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1315e8dce4dSJason Molenda if (log) 132c8064ac6SJason Molenda log->Printf ("SBQueueImpl(%p)::GetName () => %s", this, name ? name : "NULL"); 1335e8dce4dSJason Molenda 1345e8dce4dSJason Molenda return name; 1355e8dce4dSJason Molenda } 1365e8dce4dSJason Molenda 1375e8dce4dSJason Molenda void 138c8064ac6SJason Molenda FetchThreads () 1395e8dce4dSJason Molenda { 1405e8dce4dSJason Molenda if (m_thread_list_fetched == false) 1415e8dce4dSJason Molenda { 142c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 1435e8dce4dSJason Molenda if (queue_sp) 1445e8dce4dSJason Molenda { 1455e8dce4dSJason Molenda Process::StopLocker stop_locker; 1465e8dce4dSJason Molenda if (stop_locker.TryLock (&queue_sp->GetProcess()->GetRunLock())) 1475e8dce4dSJason Molenda { 1485e8dce4dSJason Molenda const std::vector<ThreadSP> thread_list(queue_sp->GetThreads()); 1495e8dce4dSJason Molenda m_thread_list_fetched = true; 1505e8dce4dSJason Molenda const uint32_t num_threads = thread_list.size(); 1515e8dce4dSJason Molenda for (uint32_t idx = 0; idx < num_threads; ++idx) 1525e8dce4dSJason Molenda { 1535e8dce4dSJason Molenda ThreadSP thread_sp = thread_list[idx]; 1545e8dce4dSJason Molenda if (thread_sp && thread_sp->IsValid()) 1555e8dce4dSJason Molenda { 1565e8dce4dSJason Molenda m_threads.push_back (thread_sp); 1575e8dce4dSJason Molenda } 1585e8dce4dSJason Molenda } 1595e8dce4dSJason Molenda } 1605e8dce4dSJason Molenda } 1615e8dce4dSJason Molenda } 1625e8dce4dSJason Molenda } 1635e8dce4dSJason Molenda 1645e8dce4dSJason Molenda void 165c8064ac6SJason Molenda FetchItems () 1665e8dce4dSJason Molenda { 1672fd83355SJason Molenda if (m_pending_items_fetched == false) 1685e8dce4dSJason Molenda { 1695e8dce4dSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 1705e8dce4dSJason Molenda if (queue_sp) 1715e8dce4dSJason Molenda { 1725e8dce4dSJason Molenda Process::StopLocker stop_locker; 1735e8dce4dSJason Molenda if (stop_locker.TryLock (&queue_sp->GetProcess()->GetRunLock())) 1745e8dce4dSJason Molenda { 1752fd83355SJason Molenda const std::vector<QueueItemSP> queue_items(queue_sp->GetPendingItems()); 1762fd83355SJason Molenda m_pending_items_fetched = true; 1772fd83355SJason Molenda const uint32_t num_pending_items = queue_items.size(); 1782fd83355SJason Molenda for (uint32_t idx = 0; idx < num_pending_items; ++idx) 1795e8dce4dSJason Molenda { 1805e8dce4dSJason Molenda QueueItemSP item = queue_items[idx]; 1815e8dce4dSJason Molenda if (item && item->IsValid()) 1825e8dce4dSJason Molenda { 1832fd83355SJason Molenda m_pending_items.push_back (item); 1845e8dce4dSJason Molenda } 1855e8dce4dSJason Molenda } 1865e8dce4dSJason Molenda } 1875e8dce4dSJason Molenda } 1885e8dce4dSJason Molenda } 1895e8dce4dSJason Molenda } 1905e8dce4dSJason Molenda 1915e8dce4dSJason Molenda uint32_t 192c8064ac6SJason Molenda GetNumThreads () 1935e8dce4dSJason Molenda { 1945e8dce4dSJason Molenda uint32_t result = 0; 1955e8dce4dSJason Molenda 1965e8dce4dSJason Molenda FetchThreads(); 1975e8dce4dSJason Molenda if (m_thread_list_fetched) 1985e8dce4dSJason Molenda { 1995e8dce4dSJason Molenda result = m_threads.size(); 2005e8dce4dSJason Molenda } 2015e8dce4dSJason Molenda return result; 2025e8dce4dSJason Molenda } 2035e8dce4dSJason Molenda 204c8064ac6SJason Molenda lldb::SBThread 205c8064ac6SJason Molenda GetThreadAtIndex (uint32_t idx) 2065e8dce4dSJason Molenda { 2075e8dce4dSJason Molenda FetchThreads(); 2085e8dce4dSJason Molenda 2095e8dce4dSJason Molenda SBThread sb_thread; 2105e8dce4dSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 2115e8dce4dSJason Molenda if (queue_sp && idx < m_threads.size()) 2125e8dce4dSJason Molenda { 2135e8dce4dSJason Molenda ProcessSP process_sp = queue_sp->GetProcess(); 2145e8dce4dSJason Molenda if (process_sp) 2155e8dce4dSJason Molenda { 2165e8dce4dSJason Molenda ThreadSP thread_sp = m_threads[idx].lock(); 2175e8dce4dSJason Molenda if (thread_sp) 2185e8dce4dSJason Molenda { 2195e8dce4dSJason Molenda sb_thread.SetThread (thread_sp); 2205e8dce4dSJason Molenda } 2215e8dce4dSJason Molenda } 2225e8dce4dSJason Molenda } 2235e8dce4dSJason Molenda return sb_thread; 2245e8dce4dSJason Molenda } 2255e8dce4dSJason Molenda 2265e8dce4dSJason Molenda 2275e8dce4dSJason Molenda uint32_t 2282fd83355SJason Molenda GetNumPendingItems () 2295e8dce4dSJason Molenda { 2305e8dce4dSJason Molenda uint32_t result = 0; 2315e8dce4dSJason Molenda FetchItems(); 2325e8dce4dSJason Molenda 2332fd83355SJason Molenda if (m_pending_items_fetched) 2345e8dce4dSJason Molenda { 2352fd83355SJason Molenda result = m_pending_items.size(); 2365e8dce4dSJason Molenda } 2375e8dce4dSJason Molenda return result; 2385e8dce4dSJason Molenda } 2395e8dce4dSJason Molenda 240c8064ac6SJason Molenda lldb::SBQueueItem 2412fd83355SJason Molenda GetPendingItemAtIndex (uint32_t idx) 2425e8dce4dSJason Molenda { 2435e8dce4dSJason Molenda SBQueueItem result; 2445e8dce4dSJason Molenda FetchItems(); 2452fd83355SJason Molenda if (m_pending_items_fetched && idx < m_pending_items.size()) 2465e8dce4dSJason Molenda { 2472fd83355SJason Molenda result.SetQueueItem (m_pending_items[idx]); 2485e8dce4dSJason Molenda } 2495e8dce4dSJason Molenda return result; 2505e8dce4dSJason Molenda } 2515e8dce4dSJason Molenda 252c8064ac6SJason Molenda lldb::SBProcess 253c8064ac6SJason Molenda GetProcess () 2545e8dce4dSJason Molenda { 2555e8dce4dSJason Molenda SBProcess result; 2565e8dce4dSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 2575e8dce4dSJason Molenda if (queue_sp) 2585e8dce4dSJason Molenda { 2595e8dce4dSJason Molenda result.SetSP (queue_sp->GetProcess()); 2605e8dce4dSJason Molenda } 2615e8dce4dSJason Molenda return result; 2625e8dce4dSJason Molenda } 263c8064ac6SJason Molenda 264c8064ac6SJason Molenda private: 265c8064ac6SJason Molenda lldb::QueueWP m_queue_wp; 266c8064ac6SJason Molenda std::vector<lldb::ThreadWP> m_threads; // threads currently executing this queue's items 267c8064ac6SJason Molenda bool m_thread_list_fetched; // have we tried to fetch the threads list already? 2682fd83355SJason Molenda std::vector<lldb::QueueItemSP> m_pending_items; // items currently enqueued 2692fd83355SJason Molenda bool m_pending_items_fetched; // have we tried to fetch the item list already? 270c8064ac6SJason Molenda }; 271c8064ac6SJason Molenda 272c8064ac6SJason Molenda } 273c8064ac6SJason Molenda 274c8064ac6SJason Molenda SBQueue::SBQueue () : 275c8064ac6SJason Molenda m_opaque_sp (new QueueImpl()) 276c8064ac6SJason Molenda { 277c8064ac6SJason Molenda } 278c8064ac6SJason Molenda 279c8064ac6SJason Molenda SBQueue::SBQueue (const QueueSP& queue_sp) : 280c8064ac6SJason Molenda m_opaque_sp (new QueueImpl (queue_sp)) 281c8064ac6SJason Molenda { 282c8064ac6SJason Molenda } 283c8064ac6SJason Molenda 284c8064ac6SJason Molenda SBQueue::SBQueue (const SBQueue &rhs) 285c8064ac6SJason Molenda { 286c8064ac6SJason Molenda if (&rhs == this) 287c8064ac6SJason Molenda return; 288c8064ac6SJason Molenda 289c8064ac6SJason Molenda m_opaque_sp = rhs.m_opaque_sp; 290c8064ac6SJason Molenda } 291c8064ac6SJason Molenda 292c8064ac6SJason Molenda const lldb::SBQueue & 293c8064ac6SJason Molenda SBQueue::operator = (const lldb::SBQueue &rhs) 294c8064ac6SJason Molenda { 295c8064ac6SJason Molenda m_opaque_sp = rhs.m_opaque_sp; 296c8064ac6SJason Molenda return *this; 297c8064ac6SJason Molenda } 298c8064ac6SJason Molenda 299c8064ac6SJason Molenda SBQueue::~SBQueue() 300c8064ac6SJason Molenda { 301c8064ac6SJason Molenda } 302c8064ac6SJason Molenda 303c8064ac6SJason Molenda bool 304c8064ac6SJason Molenda SBQueue::IsValid() const 305c8064ac6SJason Molenda { 306ac605f4aSJason Molenda bool is_valid = m_opaque_sp->IsValid (); 307ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 308ac605f4aSJason Molenda if (log) 309ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::IsValid() == %s", m_opaque_sp->GetQueueID(), 310ac605f4aSJason Molenda is_valid ? "true" : "false"); 311ac605f4aSJason Molenda return is_valid; 312c8064ac6SJason Molenda } 313c8064ac6SJason Molenda 314c8064ac6SJason Molenda 315c8064ac6SJason Molenda void 316c8064ac6SJason Molenda SBQueue::Clear () 317c8064ac6SJason Molenda { 318ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 319ac605f4aSJason Molenda if (log) 320ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::Clear()", m_opaque_sp->GetQueueID()); 321c8064ac6SJason Molenda m_opaque_sp->Clear(); 322c8064ac6SJason Molenda } 323c8064ac6SJason Molenda 324c8064ac6SJason Molenda 325c8064ac6SJason Molenda void 326c8064ac6SJason Molenda SBQueue::SetQueue (const QueueSP& queue_sp) 327c8064ac6SJason Molenda { 328c8064ac6SJason Molenda m_opaque_sp->SetQueue (queue_sp); 329c8064ac6SJason Molenda } 330c8064ac6SJason Molenda 331c8064ac6SJason Molenda lldb::queue_id_t 332c8064ac6SJason Molenda SBQueue::GetQueueID () const 333c8064ac6SJason Molenda { 334ac605f4aSJason Molenda lldb::queue_id_t qid = m_opaque_sp->GetQueueID (); 335ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 336ac605f4aSJason Molenda if (log) 337ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetQueueID() == 0x%" PRIx64, m_opaque_sp->GetQueueID(), (uint64_t) qid); 338ac605f4aSJason Molenda return qid; 339c8064ac6SJason Molenda } 340c8064ac6SJason Molenda 341c8064ac6SJason Molenda uint32_t 342c8064ac6SJason Molenda SBQueue::GetIndexID () const 343c8064ac6SJason Molenda { 344ac605f4aSJason Molenda uint32_t index_id = m_opaque_sp->GetIndexID (); 345ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 346ac605f4aSJason Molenda if (log) 347ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetIndexID() == 0x%" PRIx32, m_opaque_sp->GetQueueID(), index_id); 348ac605f4aSJason Molenda return index_id; 349c8064ac6SJason Molenda } 350c8064ac6SJason Molenda 351c8064ac6SJason Molenda const char * 352c8064ac6SJason Molenda SBQueue::GetName () const 353c8064ac6SJason Molenda { 354ac605f4aSJason Molenda const char *name = m_opaque_sp->GetName (); 355ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 356ac605f4aSJason Molenda if (log) 357ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetName() == %s", m_opaque_sp->GetQueueID(), 358ac605f4aSJason Molenda name ? name : ""); 359ac605f4aSJason Molenda return name; 360c8064ac6SJason Molenda } 361c8064ac6SJason Molenda 362c8064ac6SJason Molenda uint32_t 363c8064ac6SJason Molenda SBQueue::GetNumThreads () 364c8064ac6SJason Molenda { 365ac605f4aSJason Molenda uint32_t numthreads = m_opaque_sp->GetNumThreads (); 366ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 367ac605f4aSJason Molenda if (log) 368ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetNumThreads() == %d", m_opaque_sp->GetQueueID(), numthreads); 369ac605f4aSJason Molenda return numthreads; 370c8064ac6SJason Molenda } 371c8064ac6SJason Molenda 372c8064ac6SJason Molenda SBThread 373c8064ac6SJason Molenda SBQueue::GetThreadAtIndex (uint32_t idx) 374c8064ac6SJason Molenda { 375ac605f4aSJason Molenda SBThread th = m_opaque_sp->GetThreadAtIndex (idx); 376ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 377ac605f4aSJason Molenda if (log) 378ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetThreadAtIndex(%d)", m_opaque_sp->GetQueueID(), idx); 379ac605f4aSJason Molenda return th; 380c8064ac6SJason Molenda } 381c8064ac6SJason Molenda 382c8064ac6SJason Molenda 383c8064ac6SJason Molenda uint32_t 3842fd83355SJason Molenda SBQueue::GetNumPendingItems () 385c8064ac6SJason Molenda { 386ac605f4aSJason Molenda uint32_t pending_items = m_opaque_sp->GetNumPendingItems (); 387ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 388ac605f4aSJason Molenda if (log) 389ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetNumPendingItems() == %d", m_opaque_sp->GetQueueID(), pending_items); 390ac605f4aSJason Molenda return pending_items; 391c8064ac6SJason Molenda } 392c8064ac6SJason Molenda 393c8064ac6SJason Molenda SBQueueItem 3942fd83355SJason Molenda SBQueue::GetPendingItemAtIndex (uint32_t idx) 395c8064ac6SJason Molenda { 396ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 397ac605f4aSJason Molenda if (log) 398ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::GetPendingItemAtIndex(%d)", m_opaque_sp->GetQueueID(), idx); 3992fd83355SJason Molenda return m_opaque_sp->GetPendingItemAtIndex (idx); 400c8064ac6SJason Molenda } 401c8064ac6SJason Molenda 402c8064ac6SJason Molenda SBProcess 403c8064ac6SJason Molenda SBQueue::GetProcess () 404c8064ac6SJason Molenda { 405c8064ac6SJason Molenda return m_opaque_sp->GetProcess(); 406c8064ac6SJason Molenda } 407