| 230 | } |
| 231 | |
| 232 | std::string ProtobufArena::messageToJSON(size_t messageIndex, |
| 233 | const Protobuf::JSONPrintOptions& printOptions, |
| 234 | ExceptionTracker& exceptionTracker) const { |
| 235 | auto message = getMessage(messageIndex, exceptionTracker); |
| 236 | if (!exceptionTracker) { |
| 237 | return ""; |
| 238 | } |
| 239 | |
| 240 | // toJSON() builds a TypeResolver over the descriptor's pool and may call |
| 241 | // FindMessageTypeByName (a pool mutation); serialize against concurrent pool access. |
| 242 | auto factoryLocks = lockRetainedMessageFactories(); |
| 243 | |
| 244 | return message->toJSON(printOptions, exceptionTracker); |
| 245 | } |
| 246 | |
| 247 | void ProtobufArena::retainMessageFactory(const Ref<ProtobufMessageFactory>& messageFactory) { |
| 248 | for (const auto& existingMessageFactory : _retainedMessageFactories) { |
no test coverage detected