Hi guys,

Just deployed 0.9.5.0.pre with hypernode (our hypertable nodejs binding),
which uses the new C++ async scanner api. I'm seeing an error on an async
read.

The error looks like:
/usr/local/include/boost/smart_ptr/intrusive_ptr.hpp:166: T*
boost::intrusive_ptr<T>::operator->() const [with T =
Hypertable::CellsBuilder]: Assertion `px != 0' failed.

This traces back to a class I defined in the binding, that derives from
ResultCallback.

  class ScanCallback: public Hypertable::ResultCallback {
  public:
    ScanCallback() : m_cells(8) {}
    virtual ~ScanCallback() {}

    void
    scan_ok (TableScannerAsync *scanner, ScanCellsPtr &cells) {
      ScopedLock lock(mutex);
      Cells cc;
=>   cells->get(cc);
      for (Hypertable::Cells::iterator ci = cc.begin(),
             cend = cc.end(); ci != cend; ci++) {
        m_cells.add(*ci);
      }
    }
    ...
  }

The error is happening at the [ cells->get(cc) ] call marked in the code
fragment above.

The backtrace looks like:
(gdb) bt
#0  0x00007ffff64e3ba5 in raise () from /lib/libc.so.6
#1  0x00007ffff64e76b0 in abort () from /lib/libc.so.6
#2  0x00007ffff64dca71 in __assert_fail () from /lib/libc.so.6
#3  0x00007fffd1b6a3eb in
boost::intrusive_ptr<Hypertable::CellsBuilder>::operator-> (this=0xcaf608)
at /usr/local/include/boost/smart_ptr/intrusive_ptr.hpp:166
#4  0x00007fffd1b630ca in Hypertable::ScanCells::get (this=0xcaf5a0,
cells=...) at /a/hypertable/current/include/Hypertable/Lib/ScanCells.h:50
#5  0x00007fffd1b650ac in HyperConn::ScanCallback::scan_ok (this=0xcede80,
scanner=0xc2fb00, cells=...) at ../binding.cc:70
#6  0x00007fffd186d6d8 in Hypertable::TableScannerAsync::maybe_callback_ok
(this=0xc2fb00, scanner_id=<value optimized out>, next=<value optimized
out>, do_callback=255, cells=...) at /home/developer/s\
rc/hypertable/src/cc/Hypertable/Lib/TableScannerAsync.cc:334
#7  0x00007fffd1871b9a in Hypertable::TableScannerAsync::handle_result
(this=0xc2fb00, scanner_id=0, event=<value optimized out>, is_create=<value
optimized out>) at /home/developer/src/hypertable/src/\
cc/Hypertable/Lib/TableScannerAsync.cc:267
#8  0x00007fffd18753b4 in Hypertable::TableScannerHandler::run
(this=0xcac410) at
/home/developer/src/hypertable/src/cc/Hypertable/Lib/TableScannerHandler.cc:40
#9  0x00007fffd173bfab in operator() (this=0xc96890) at
/home/developer/src/hypertable/src/cc/AsyncComm/ApplicationQueue.h:154
#10 boost::detail::thread_data<Hypertable::ApplicationQueue::Worker>::run
(this=0xc96890) at /usr/local/include/boost/thread/detail/thread.hpp:56
#11 0x00007fffcf33cb70 in thread_proxy () from
/a/hypertable/current/lib/libboost_thread.so.1.40.0
#12 0x00007ffff683a971 in start_thread () from /lib/libpthread.so.0
#13 0x00007ffff659692d in clone () from /lib/libc.so.6
#14 0x0000000000000000 in ?? ()


Tracing it back, it is happening in Hypertable/Lib/ScanCells.h:50

void ScanCells::get(Cells &cells) { m_cells->get(cells); }

The value contained by the intrusive_ptr m_cells is null at this point.

(gdb)
#4  0x00007fffd1b630ca in Hypertable::ScanCells::get (this=0xcaf5a0,
cells=...) at /a/hypertable/current/include/Hypertable/Lib/ScanCells.h:50
(gdb) p m_cells
$1 = {px = 0x0}


----

So my question is: what does

ResultCallback::scan_ok(TableScannerAsync *scanner, ScanCellsPtr &cells)

indicate ? Are there any checks that need to be done before we can attempt
to read off the cells contained in the ScanCellsPtr &cells ? Couldn't find
anything obvious in code, hence asking..

TIA,
--Naveen
founder & ceo, campfire labs. 415 425 5412. We're hiring!
http://www.campfirelabs.com/jobs

-- 
You received this message because you are subscribed to the Google Groups 
"Hypertable Development" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hypertable-dev?hl=en.

Reply via email to