version 1.6, 2025/04/13 04:22:43
|
version 1.7, 2025/05/01 21:02:31
|
Line 24
|
Line 24
|
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
* |
* |
* $Log$ |
* $Log$ |
|
* Revision 1.7 2025/05/01 21:02:31 snw |
|
* Documentation updates |
|
* |
* Revision 1.6 2025/04/13 04:22:43 snw |
* Revision 1.6 2025/04/13 04:22:43 snw |
* Fix snprintf calls |
* Fix snprintf calls |
* |
* |
Line 49
|
Line 52
|
#include "shmmgr.h" |
#include "shmmgr.h" |
#include "mref.h" |
#include "mref.h" |
#include "transact.h" |
#include "transact.h" |
|
#include "log.h" |
|
|
#if !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(__OS2__) |
#if !defined(__OpenBSD__) && !defined(__APPLE__) && !defined(__OS2__) |
union semun { |
union semun { |
Line 110 short locktab_get_sem(void)
|
Line 114 short locktab_get_sem(void)
|
if (semop (semid_locktab, &s, 1) != -1) { |
if (semop (semid_locktab, &s, 1) != -1) { |
return TRUE; |
return TRUE; |
} |
} |
|
printf ("jibjaw\r\n"); |
sleep (1); |
sleep (1); |
|
|
} |
} |
Line 237 void locktab_increment(char *key, long l
|
Line 241 void locktab_increment(char *key, long l
|
|
|
} |
} |
else { |
else { |
|
int sigint_ct = 0; |
|
|
for (;;) { |
for (;;) { |
|
|
if (locktab_insert (key) != NULL) { |
if (locktab_insert (key) != NULL) { |
Line 244 void locktab_increment(char *key, long l
|
Line 250 void locktab_increment(char *key, long l
|
return; |
return; |
} |
} |
else { |
else { |
|
if (merr () == INRPT) { |
|
sigint_ct++; |
|
|
|
if (sigint_ct == 1) { |
|
printf ("\r\nlocktab_insert: got Ctrl-C in blocking LOCK; Ctrl-C again to force the process to halt\r\n"); |
|
merr_clear (); |
|
} |
|
else { |
|
printf ("\r\n"); |
|
logprintf (FM_LOG_FATAL, "locktab_insert: blocking LOCK was interrupted; forcing halt"); |
|
} |
|
} |
sleep (1); |
sleep (1); |
} |
} |
|
|
Line 409 void locktab_decrement(char *key, long l
|
Line 427 void locktab_decrement(char *key, long l
|
|
|
void locktab_unlock_all(void) |
void locktab_unlock_all(void) |
{ |
{ |
|
locktab_unlock_all_by_pid (pid); |
|
} |
|
|
|
void locktab_unlock_all_by_pid(const pid_t target_pid) |
|
{ |
locktab_ent_t *lck; |
locktab_ent_t *lck; |
|
int remove_ct; |
|
|
|
remove_ct = 0; |
|
if (target_pid != pid) { |
|
logprintf (FM_LOG_INFO, "locktab_unlock_all_by_pid: removing all locks for pid %ld", target_pid); |
|
} |
|
|
|
|
for (lck = shm_config->hdr->locktab_head; lck != NULL; lck = lck->next) { |
for (lck = shm_config->hdr->locktab_head; lck != NULL; lck = lck->next) { |
|
|
if (lck->owner_job == pid) { |
if (lck->owner_job == target_pid) { |
|
remove_ct++; |
|
|
if (tp_level > lck->tp_level) { |
if (tp_level > lck->tp_level) { |
merr_raise (M41); |
merr_raise (M41); |
return; |
return; |
Line 428 void locktab_unlock_all(void)
|
Line 459 void locktab_unlock_all(void)
|
|
|
} |
} |
|
|
} |
} |
|
|
|
if (target_pid != pid) { |
|
logprintf (FM_LOG_INFO, "locktab_unlock_all_by_pid: removed %ld lock(s) for pid %ld", remove_ct, target_pid); |
|
} |
|
|
|
|
} |
} |
|
|