phosek added a comment.
This change broke the acquire+release case. Concretely, in Flutter we have this
code:
https://github.com/flutter/engine/blob/master/lib/ui/isolate_name_server/isolate_name_server.h#L26.
This worked fine previously, but after this change we're getting an error in
https://github.com/flutter/engine/blob/master/lib/ui/isolate_name_server/isolate_name_server_natives.cc#L19
and many other places like this one:
../../third_party/flutter/lib/ui/isolate_name_server/isolate_name_server_natives.cc:19:33:
error: releasing mutex 'name_server->mutex_' that was not held
[-Werror,-Wthread-safety-analysis]
Dart_Port port = name_server->LookupIsolatePortByName(name);
^
../../third_party/flutter/lib/ui/isolate_name_server/isolate_name_server_natives.cc:24:1:
error: mutex 'name_server->mutex_' is still held at the end of function
[-Werror,-Wthread-safety-analysis]
}
^
../../third_party/flutter/lib/ui/isolate_name_server/isolate_name_server_natives.cc:19:33:
note: mutex acquired here
Dart_Port port = name_server->LookupIsolatePortByName(name);
Would it be possible revert this change? The old logic was "all acquires; then
all releases" and the new logic is "all releases; then all acquires" but I
think this needs fancier logic with actual bookkeeping to detect the upgrade
case without breaking the acquire+release case.
Repository:
rC Clang
https://reviews.llvm.org/D49355
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits