Repository navigation
deps: rust-samp 3.6.0, transporte pela mainthread e fecha a 1.4.0 - #67
Merged
Merged
Conversation
Sobe o SDK para 3.6.0 (crates.io) e usa a fila da mainthread como transporte de resultado: o worker que termina uma query, ou um hash Argon2id, entrega o resultado ao plugin via post_with e some; os canais mpsc de resultado do query.rs e do password.rs deixam de existir. O SDK drena a fila imediatamente antes do on_tick, entao o despacho continua no on_tick e nada chega um tick depois. A ordem FIFO segue nossa, no buffer de sequencia. Entregar e despachar ficam separados por necessidade, nao por gosto: chamar Pawn de dentro do job deixaria um public reentrar numa native e pegar um segundo &mut do plugin, porque o #[native] resolve o plugin com plugin::get cru. Corrige duas falhas que uma rajada de queries expunha. Worker agora nasce com pilha de 256 KiB — num servidor 32-bit, algumas centenas de workers com os 8 MiB default esgotavam o espaco de enderecos e abortavam o processo; o teto medido foi de ~1700 para mais de 9000 workers. E thread recusada pelo SO nao e mais panico: thread::spawn entrava em panico, o wrapper da native engolia, e a submissao se perdia junto com o numero de sequencia, travando para sempre as callbacks ordenadas na fila. Agora virou resultado com erro: a sequencia e contabilizada, o OnQueryError dispara e a native devolve false. Fecha o changelog da 1.4.0 com data de release, atualiza o lockfile e re-pina as sete actions que estavam atras da release atual. O argon2 fica no 0.5 de proposito: o 0.6.0 quebra a API de hash e a compatibilidade dos hashes ja gravados merece PR propria.
NullSablex
force-pushed
the
deps/rust-samp-3.6.0
branch
from
October 11, 2026 14:38
e7496a5 to
d68b3f0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sobe o SDK para 3.6.0, passa o transporte de resultado para a fila da
mainthread, corrige duas falhas que uma rajada de queries expunha e fecha a seção 1.4.0 do changelog.mainthreadcomo transporteA 3.6.0 traz
post_with, que entrega&mut Tao job — a rota que faltava para o resultado de uma worker thread aterrissar no estado do plugin. Com ela, os canaismpscde resultado deixam de existir, tanto emquery.rsquanto empassword.rs(ompscque resta ali é só a fila de trabalho dos workers).O worker que termina uma query, ou um hash Argon2id, chama
post_with::<MysqlPlugin>entregando o resultado aoaccept()do manager e some. O SDK drena essa fila imediatamente antes doon_tick, então o despacho continua acontecendo noon_ticke nada chega um tick depois do que chegava.Entregar e despachar seguem sendo dois passos, por necessidade:
post_withproíbe chamar Pawn de dentro do job, e a razão se aplica aqui exatamente — umpublicreentrando numa native pegaria um segundo&mutdo mesmo plugin, porque o#[native]resolve o plugin complugin::getcru, não com owith_instance, que recusaria. Opost_with_amxsepara as metades, mas entrega a resposta ao script só depois de o empréstimo terminar: tarde para manter um cache ativo durante a chamada. Bufferizar no job e despachar no tick atende às duas coisas.A ordem FIFO continua nossa, no buffer de sequência, porque os jobs rodam em ordem de conclusão.
Rajada de queries matava o servidor, e travava a fila FIFO
Submeter 2000 queries num tick abortava o processo com
memory allocation of 4194304 bytes failed. A causa é específica da arquitetura: uma thread por query, com a pilha padrão de 8 MiB, dentro de um servidor 32-bit — algumas centenas de workers vivos esgotam o espaço de endereçamento.Dois problemas, os dois corrigidos:
thread::spawnentra em pânico quando o SO diz não; o wrapper da native engolia o pânico e a submissão se perdia — junto com o número de sequência, de modo que toda callback ordenada atrás dela esperaria para sempre. Agora é um resultado com erro comum: a sequência é contabilizada, oOnQueryErrordispara e a native devolvefalse. Toda native de submissão devolve o resultado real da submissão.RUSTSEC-2026-0253 deixou de se aplicar
O
mysql28.0.3 exigelru0.18, e o lockfile agora traz 0.18.5. A correção estava mergeada no upstream desde 21/09 e nenhumcargo updatea alcançava enquanto o driver pedia a faixa0.16— precisava de uma versão nova do driver, que chegou.Sobra um aviso informativo, o do
rustls-pemfile: sem manutenção, sem correção nem no master do driver, e removê-lo aqui significaria abrir mão do TLS ou manter um fork.Dependências e workflows
cargo updatefechando o lockfile: dez crates transitivos (cc,generic-array,powerfmt,serdee companhia,twox-hash,uuid,zeroize).upload-artifactv7.0.2,codeql-actionv4.38.3,scorecard-actionv2.4.4,install-actionv2.87.27,action-gh-releasev3.0.3,rust-cachev2.9.2,release-drafterv7.10.0 — SHA e comentário# vX.Y.Zjuntos.argon2fica no 0.5 de propósito. O 0.6.0 é breaking exatamente onde não pode quebrar em silêncio: a featurestdsaiu,SaltStringeOsRngmudaram de lugar,hash_passwordtrocou de assinatura ePasswordHashestá deprecado. Hashes já gravados pormysql_hash_passwordtêm de continuar verificando após o bump, e provar isso merece PR própria.Changelog
Seção
## [1.4.0] — 2026/10/11, cobrindo tudo desde a 1.3.0, com as entradas novas do transporte pelamainthread, da correção da rajada, do fechamento de lockfile/actions e da decisão sobre oargon2.Verificação
Alvo
i686-unknown-linux-gnue um SA-MP 0.3.7 com MariaDB 11.8:cargo clippy --all-targets -- -D warningsecargo fmt --checklimposcargo audit: um aviso informativo, nenhuma vulnerabilidademkdocs build --strict, verificação de codificação Pawn (21 fontes ASCII),--selftest(6 fixtures) e--checkdo gerador — todos limposMYSQL_SYNC, diagnóstico de TLS, leitura de limite, callback assíncrono eOnQueryErrorcom ordem e mensagem corretas