Como limpar o lock de um LockByName

No artigo de hoje, vamos ver em como liberar um lock gerado pela função LockByName.

Algumas vezes precisamos fazer alguma customização e temos que usar o controle de semáforos. Por exemplo, enquanto a rotina estiver sendo executada pelo Joãozinho, o Zézinho não pode usar a mesma rotina.

Para isso, podemos usar as famosas LockByName e UnlockByName, que criam arquivos dentro da nossa pasta de semáforo (através da GetPathSemaforo) conforme a configuração do special key (através da __GetSpecialKey).

Abaixo um exemplo, de um arquivo gerado (com o nome da special.key).

Pasta dentro da Protheus Data

Mas e se precisarmos que o lock seja liberado? Digamos que o usuário deixou a tela aberta, ou o processo travou, como podemos proceder?

Forma 1 – Derrubando a Conexão do Usuário e apagando o arquivo

Se você souber o usuário que esta com o lock travado, basta você:

  1. Derrubar a conexão dele. Só com isso, geralmente já libera o lock, caso não libere, siga os próximos passos abaixo
  2. Ir na pasta do seu semaforo (configurada no appserver.ini com SEMAFOROPATH, ou por padrão na \semaforo\ dentro da Protheus Data)
  3. Excluir o arquivo gerado pelo LockByName

Forma 2 – Forçando a exclusão do arquivo

Caso você use algum servidor Linux ou tenha algum aplicativo no Windows que permita fazer a exclusão de arquivos bloqueados por processos, o que você pode fazer é:

  1. Abrir o console (Linux) / prompt de comando (Windows)
  2. Ir até a pasta onde se encontra o arquivo com a trava
  3. Forçar a exclusão via linha de comando

Abaixo exemplo no Windows:

del /f "C:\pasta\nome do arquivo.key"

Abaixo exemplo em distros Linux:

rm -f "/pasta/nome do arquivo.key"

Forma 3 – Reiniciando o Protheus

Em último caso, você pode reiniciar o AppServer em que o Lock foi gerado, que assim a rotina ficará liberada para ser usada novamente.

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação