def add_callback(self, callback):
        with self._callback_lock:
            list_empty = not self._callbacks
            self._callbacks.append(stack_context.wrap(callback))
        if list_empty and thread_get_ident() != self._thread_ident:
            # If we're in the IOLoop's thread, we know it's not currently
            # polling.  If we're not, and we added the first callback to an
            # empty list, we may need to wake it up (it may wake up on its
            # own, but an occasional extra wake is harmless).  Waking
            # up a polling IOLoop is relatively expensive, so we try to
            # avoid it when we can.
            self._waker.wake()
Updates the table options for the given model if necessary.
dataset/ETHPy150Open felipecruz/zmqpy/zmqpy/eventloop/ioloop.py/IOLoop.add_callback--crossover with--dataset/ETHPy150Open datastax/python-driver/cassandra/cqlengine/management.py/_update_options