| 1 | *** D:\gerrit\technology\gui\sandbox\packages\external\boost\libs\signals\src\signal_base.cpp.orig 2012-06-22 10:34:30.000000000 -0500
|
|---|
| 2 | --- D:\gerrit\technology\gui\sandbox\packages\external\boost\libs\signals\src\signal_base.cpp.modified 2012-06-22 10:38:58.000000000 -0500
|
|---|
| 3 | ***************
|
|---|
| 4 | *** 141,153 ****
|
|---|
| 5 | --- 141,159 ----
|
|---|
| 6 | // we can come back later to remove the iterator
|
|---|
| 7 | if (self->call_depth > 0) {
|
|---|
| 8 | self->flags.delayed_disconnect = true;
|
|---|
| 9 | }
|
|---|
| 10 | else {
|
|---|
| 11 | // Just remove the slot now, it's safe
|
|---|
| 12 | + // There is a chance that the binding has the last reference to
|
|---|
| 13 | + // the signal, and destroying it will destroy the signal. To prevent
|
|---|
| 14 | + // this from causing a problem keep a local copy of the binding
|
|---|
| 15 | + // during it's removal from the slot list.
|
|---|
| 16 | + boost::any keep_alive = (*slot)->second;
|
|---|
| 17 | self->slots_.erase(*slot);
|
|---|
| 18 | + return;
|
|---|
| 19 | }
|
|---|
| 20 | }
|
|---|
| 21 | }
|
|---|
| 22 |
|
|---|
| 23 | void signal_base_impl::remove_disconnected_slots() const
|
|---|
| 24 | { slots_.remove_disconnected_slots(); }
|
|---|