| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
TStringBuf (with &&)
|
|
|
| |
Update tools: yexport
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
By [RFC3629 section 3](https://datatracker.ietf.org/doc/html/rfc3629#section-3):
```
The definition of UTF-8 prohibits encoding character numbers between
U+D800 and U+DFFF, which are reserved for use with the UTF-16
encoding form (as surrogate pairs) and do not directly represent characters.
```
Current implementation of `ReadUTF8CharAndAdvance` allows `UTF-8` encoded surrogate characters
like 0xED 0xA0 0xBD or 0xED 0xB3 0x9A leaving them in the strings
that cannot be processed afterwards by external programs like `iconv`.
This patch provides `strict` template flag that disables this leniency.
This flag is not enabled by default, because Arcadia already has hundreds of
tests with inputs containing such surrogate pairs and these tests breaks in strict mode
and there is a chance that prod might affected too.
SSE4 implementation doesn't perform any validation at all, so it is left unchanged.
|
|
|
|
|
|
| |
По следам https://a.yandex-team.ru/review/2996409/details
Исправлены случаи при неудачных кастах:
1. контрольный блок дёргается даже при указании на nullptr (нехорошо для атомиков)
2. если исходный шаред поинтер разрушится раньше, чем полученный nullptr (например, при возврате из функции), то ресурс утечёт
|
|
|
|
| |
returning double value
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
- don't hide epoll_ctl add errors;
- print "fd" and "what" args.
|
|
|
|
|
| |
Контекст. В древнем странном коде обнаружили, что если создавать `TThreadPool` часто и конкуретно с запуском `TShellCommand`, то иногда последняя дедлочится: если начали выполнять конструктор `TThreadPool` и регистрацию в `TAtforkQueueRestarter`, захватив `TAtforkQueueRestarter::ActionMutex`, а в другом потоке параллельно сделали `fork`, то последний может форкнуться с залоченым мьютексом. Первым делом происходит вызов коллбеков из `pthread_atfork`, где мьютекс лочится заново.
Конечно, форкаться в сложных программах с тредпулами категорически запрещено, но, подозреваю, много кода в аркадии так написано. Давайте как-то защитимся от такого.
|
| |
|
| |
|
|
|
| |
`#define noexcept throw()` is a questionable idea, since replacing `noexcept` with `throw()` in expressions such as `noexcept(true)` results in spectacular compiler errors. We stopped supporting CUDA 8 (and even CUDA 9) long ago, which means we can just get rid of the problematic define.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
nvcc10.1 is unable to compile `[[clang::reinitializes]]` and issues warning as follows:
```
util/generic/ptr.h(194): warning: attribute namespace "clang" is unrecognized
util/generic/ptr.h(201): warning: attribute namespace "clang" is unrecognized
[...]
```
nvcc11 compiles this code without any warnings.
This PRs disable `[[clang::reinitialized]]` when compiling with nvcc10.
|
| |
|
| |
|
| |
|
|
|
| |
Update tools: yexport
|
|
|
| |
https://clubs.at.yandex-team.ru/arcadia/8450/8489#reply-arcadia-8489
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For example, https://github.com/google/sanitizers/issues/1352 - tsan is not working well with std::atomic_thread_fence
Minimal reproducible example (and one that bothers most in every fiber-aware service):
```
auto threadPool = NYT::New<NYT::NConcurrency::TThreadPool>(2, "thread");
TVector<NYT::TFuture<void>> futures;
for (size_t i = 0; i < 100000; ++i) {
futures.emplace_back(BIND([]() {
}).AsyncVia(threadPool->GetInvoker()).Run());
}
for (auto& future : futures) {
future.Get().ThrowOnError();
}
```
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
* [cmake] Hierarchical add_subdirectroy structure
* [cmake] Support for same file compilation multiple times with different flags
|
| |
|
|
|
| |
Если мы сдвигаем addr в меньшую сторону, то len мы должны увеличить на столько же. В противном случае, мы можем залочить меньше, чем нужно.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Предыдущий заход: https://a.yandex-team.ru/review/2811077/details#comment--4489184
После изменений можно будет обращаться к HTTP серверу, слушающему на unix domain socket. Пример такого сервера:
```js
require('http').createServer((req, res) => {
console.log(req);
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify({
'metrics': [
{
'labels': {
'name': 'metric',
'some_key': 'some_value'
},
'type': 'GAUGE',
'value': 123
}
]
}, null, 4));
})
.listen('/home/ivanzhukov/test_ua/ua.sock');
// вместо .listen(7777);
```
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
в профиле перфа Маркетного репорта постоянно вижу GmTimeR
там в цикле вычитается по количеству дней в году и прибавляется по 1 году с 1970 по 2022 на каждый вызов
В Маркете проблема стреляла и раньше
в последней итерации функция становится на ~~30% быстрее системной gmtime_r
%%
----------- GmTimeR ---------------
samples: 20691
iterations: 264304536
iterations hr: 264M
run time: 5.002055225
per iteration: 39.85866484 cycles
----------- gmtime_r ---------------
samples: 17452
iterations: 188034528
iterations hr: 188M
run time: 5.001259884
per iteration: 56.96146577 cycles
%%
текущая верся почти в 2 раза медленнее системной:
%%
----------- GmTimeR ---------------
samples: 12760
iterations: 100514931
iterations hr: 101M
run time: 5.00096133
per iteration: 105.4334174 cycles
----------- gmtime_r ---------------
samples: 17667
iterations: 192697896
iterations hr: 193M
run time: 5.001356603
per iteration: 55.69031415 cycles
%%
|
| |
|
| |
|
| |
|
|
|
| |
At the time an attempt to use e. g. `std::find_if` with `TString::rbegin()` / `TString::rend()` does not compile against `-DUSE_STL_SYSTEM` / modern libstdc++.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Позволяем писать без неиницилизированных переменных по месту использования.
Вот такую красоту например:
```
if (auto a = TryFromString<T>(str)) {
что-то делаем с \*a
}
```
|
|
|
|
|
| |
This means, that moved-from object can be safely used after the call of such method.
This attribute is used by clang-tidy which checks that moved-from objects are not used
unless a reinitialization method is called first.
|
| |
|
|
|
|
|
| |
Add copy operator and constructor
Create copy with initialized split test
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
AdjacentFind* functions
AdjacentFind и AdjacentFindBy принимали контейнер по константной ссылке и из-за этого возвращали константный итератор.
Стоит для некостантного контейнера возвращать также неконстантный итератор (если он есть).
Это позволит
1. использовать итератор для модификации контейнера;
2. обойти проблему, когда методы `end()` и `cend()`/`std::as_const(…).end()` возвращают итераторы разных типов, которые нельзя сравнивать, либо для которых выбор оператора сравнения неоднозначен.
|