169 похожих чатов

Вопрос в том, зачем этот код вообще нужен? От чего

конкретно он защищает ?

13 ответов

12 просмотров

выше пояснили. а защита не может быть лишней, мало ли сто кому в голову взбредёт

От второго потока, который может вклиниться на if

Rudeus
От второго потока, который может вклиниться на if

на самом деле многопочные защиты, в идеале, реализуются блокировками, а не такими условиями

Jack128- Автор вопроса
Rudeus
От второго потока, который может вклиниться на if

каким образом?? Если frefcount = 0, то не у кого нету ссылок на интерфейс. И никто не может никуда вклинится. В этом и смысл использования interlockeddecrement/interlockedincrement

Jack128
каким образом?? Если frefcount = 0, то не у кого...

Хитрость программистов никто не отменял, как и приведение типа. Переключение потока разное везде, там между декрементом и дестроем много чего пролетит

Jack128- Автор вопроса
Iluha Companets
на самом деле многопочные защиты, в идеале, реализ...

Открой для себя чудесный мир lockfree алгоритмов https://en.wikipedia.org/wiki/Non-blocking_algorithm

Jack128- Автор вопроса
Rudeus
Хитрость программистов никто не отменял, как и при...

ну дык от какой конкретно хитрости то эта фигня спасет ??

Jack128
ну дык от какой конкретно хитрости то эта фигня сп...

Преобразуй интерфейс к указателю, потом обратно

Jack128- Автор вопроса
Rudeus
Преобразуй интерфейс к указателю, потом обратно

И ?? А как эта проверка с fdestroycount поможет ?? Она только побьет чужую память

Jack128
И ?? А как эта проверка с fdestroycount поможет ??...

Или даже проще, просто лишний раз ручками вызвать release а fdestroycount сторожит от вызова destroy второй раз

Jack128- Автор вопроса
Rudeus
Или даже проще, просто лишний раз ручками вызвать ...

Повторюсь, ну да, вызвал я ручками _Release , а чем fdestroycount то поможет ?? После первого _Release frefcount стала 0, память из подобъекта освободилась. Возможно ушла к кому нить другому на другие нужды. при втором (лишнем) _Release - во первых InterlockedDecriment вернет -1 (если больше никто не трогал память) и мы вообще в ветку с проверкой fdestroycount не войдем. Но это уже некоректное поведение, потому что мы переписали чужую память. но даже если память ушла к другому объекту и он выставил в frefcount = 1 , то мы ему обнулили это frefcount (то есть побили тому объекту данные) , потом заинкрементили fdestroycount (еще раз побили чужие данные) ну и не вызвали destroy. Где тут защита ?

Jack128
И ?? А как эта проверка с fdestroycount поможет ??...

В общем, предположим есть функция, которая создает объект, берет интерфейс, преобразует к pointer и отдает в другой поток. На окончании падает в release, там 0 и управление передается во второй поток, который разыменовывает указатель, делает addref и release, чей вызов тоже дает 0, далее fdestroycount = 1 и идет дестрой. и тут просыпается первый поток, вызывает инкремент fdestroycountи получает 2

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта