void mtpUpdateDcOptions(const QVector<MTPDcOption> &options) { QSet<int32> already, restart; { mtpDcOptions opts; { QReadLocker lock(mtpDcOptionsMutex()); opts = cDcOptions(); } for (QVector<MTPDcOption>::const_iterator i = options.cbegin(), e = options.cend(); i != e; ++i) { const MTPDdcOption &optData(i->c_dcOption()); int32 id = optData.vid.v, idWithShift = id + (optData.vflags.v * _mtp_internal::dcShift); if (already.constFind(idWithShift) == already.cend()) { already.insert(idWithShift); mtpDcOptions::const_iterator a = opts.constFind(idWithShift); if (a != opts.cend()) { if (a.value().ip != optData.vip_address.c_string().v || a.value().port != optData.vport.v) { restart.insert(id); } } opts.insert(idWithShift, mtpDcOption(id, optData.vflags.v, optData.vip_address.c_string().v, optData.vport.v)); } } { QWriteLocker lock(mtpDcOptionsMutex()); cSetDcOptions(opts); } } for (QSet<int32>::const_iterator i = restart.cbegin(), e = restart.cend(); i != e; ++i) { MTP::restart(*i); } }
void mtpUpdateDcOptions(const QVector<MTPDcOption> &options) { QSet<int32> already, restart; { mtpDcOptions opts(cDcOptions()); for (QVector<MTPDcOption>::const_iterator i = options.cbegin(), e = options.cend(); i != e; ++i) { const MTPDdcOption &optData(i->c_dcOption()); if (already.constFind(optData.vid.v) == already.cend()) { already.insert(optData.vid.v); mtpDcOptions::const_iterator a = opts.constFind(optData.vid.v); if (a != opts.cend()) { if (a.value().ip != optData.vip_address.c_string().v || a.value().port != optData.vport.v) { restart.insert(optData.vid.v); } } opts.insert(optData.vid.v, mtpDcOption(optData.vid.v, optData.vhostname.c_string().v, optData.vip_address.c_string().v, optData.vport.v)); } } cSetDcOptions(opts); } for (QSet<int32>::const_iterator i = restart.cbegin(), e = restart.cend(); i != e; ++i) { MTP::restart(*i); } }