diff --git a/direct/src/plugin/p3dPackage.cxx b/direct/src/plugin/p3dPackage.cxx index ed77638311..91d535c14b 100755 --- a/direct/src/plugin/p3dPackage.cxx +++ b/direct/src/plugin/p3dPackage.cxx @@ -396,7 +396,8 @@ extract_archive() { //////////////////////////////////////////////////////////////////// void P3DPackage:: report_done(bool success) { - cerr << "report_done(" << success << ")\n"; + cerr << "report_done(" << success << "), " + << _callbacks.size() << " callbacks\n"; if (success) { _ready = true; _failed = false; @@ -503,6 +504,15 @@ stream_hex(ostream &out, const unsigned char *source, size_t size) { } } +//////////////////////////////////////////////////////////////////// +// Function: P3DPackage::Callback::package_ready +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +void P3DPackage::Callback:: +package_ready(P3DPackage *package, bool success) { +} + //////////////////////////////////////////////////////////////////// // Function: P3DPackage::Download::Constructor // Access: Public diff --git a/direct/src/plugin/p3dSession.cxx b/direct/src/plugin/p3dSession.cxx index 513e513da3..a1e72af918 100644 --- a/direct/src/plugin/p3dSession.cxx +++ b/direct/src/plugin/p3dSession.cxx @@ -141,7 +141,7 @@ start_instance(P3DInstance *inst) { start_p3dpython(); } else { // Otherwise, set a callback, so we'll know when it is ready. - if (_panda3d_callback != NULL) { + if (_panda3d_callback == NULL) { _panda3d_callback = new PackageCallback(this); _panda3d->set_callback(_panda3d_callback); } @@ -635,7 +635,8 @@ posix_create_process(const string &program, const string &start_dir, // Description: //////////////////////////////////////////////////////////////////// P3DSession::PackageCallback:: -PackageCallback(P3DSession *session) { +PackageCallback(P3DSession *session) : _session(session) +{ } //////////////////////////////////////////////////////////////////// @@ -645,5 +646,15 @@ PackageCallback(P3DSession *session) { //////////////////////////////////////////////////////////////////// void P3DSession::PackageCallback:: package_ready(P3DPackage *package, bool success) { + if (this == _session->_panda3d_callback) { + _session->_panda3d_callback = NULL; + if (package == _session->_panda3d) { + _session->start_p3dpython(); + } else { + cerr << "Unexpected panda3d package: " << package << "\n"; + } + } else { + cerr << "Unexpected callback for P3DSession\n"; + } }