データベース書き換えロックに関する実装。
More...
#include "../include/lock.h"
#include <errno.h>
#include <limits.h>
#include <semaphore.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include "../include/common.h"
|
static void | print_usage () |
| ヘルプをstderrに出力する。
|
|
static int | parse_arguments (int argc, char **argv, char *sem_name, char *shm_name, int *d_opt, unsigned int *timeout, int *verbose) |
| コマンドライン引数を解析する。 More...
|
|
static int | check_repetition_locking (pid_t pgid, const char *shm_name) |
| すでにロックを取得していないか確認する。 More...
|
|
static void | sigalrm_handler (int sig, siginfo_t *siginfo, void *ucontext) |
| シグナルハンドラ。特に何もしない。
|
|
static int | setup_sigalrm_handler (struct sigaction *sa_org) |
| SIGALRMのシグナルハンドラを変更する。 More...
|
|
static int | restore_sigalrm_handler (struct sigaction *sa_org) |
| SIGALRMのシグナルハンドラを戻す。 More...
|
|
int | lock (int argc, char *argv[]) |
| スケジュールの書き換えをロックする。 More...
|
|
#define DEFAULT_TIMEOUT 5 |
セマフォ取得待ちのタイムアウトのデフォルト値。(sec)
static int check_repetition_locking |
( |
pid_t |
pgid, |
|
|
const char * |
shm_name |
|
) |
| |
|
static |
すでにロックを取得していないか確認する。
- Parameters
-
[in] | pgid | 確認するpgid。 |
[in] | shm_name | 共有メモリのオブジェクト名。 |
- Returns
- 取得していない時は0、すでに取得している時は1、失敗時には-1を返す。
int lock |
( |
int |
argc, |
|
|
char * |
argv[] |
|
) |
| |
スケジュールの書き換えをロックする。
他のプロセスによってロックされている場合は、ロックが解除されるまで待つ。 指定時間以内にロックが解除されない場合は、タイムアウトする。
- Parameters
-
[in] | argc | argc値 |
[in] | argv | argv値 |
- Returns
- 成功時は0、失敗時には1、使用方法に誤りがある場合は2、タイムアウトした場合は3を返す。
static int parse_arguments |
( |
int |
argc, |
|
|
char ** |
argv, |
|
|
char * |
sem_name, |
|
|
char * |
shm_name, |
|
|
int * |
d_opt, |
|
|
unsigned int * |
timeout, |
|
|
int * |
verbose |
|
) |
| |
|
static |
コマンドライン引数を解析する。
- Parameters
-
[in] | argc | argc値 |
[in] | argv | argv値 |
[out] | sem_name | '-d'オプション(データベース番号)が反映される。 |
[out] | shm_name | '-d'オプション(データベース番号)が反映される。 |
[out] | d_opt | '-d'オプション(データベース番号)が指定された場合、1が設定される。 |
[out] | timeout | '-t'オプション(タイムアウトまでの時間)の値が反映される。 |
[out] | verbose | '-v'オプション(verboseモード)の値が反映される。 |
- Returns
- 成功時は0、'h'オプションが指定された場合は1、不正な値が与えられた場 合は2を返す。
static int restore_sigalrm_handler |
( |
struct sigaction * |
sa_org | ) |
|
|
static |
SIGALRMのシグナルハンドラを戻す。
- Parameters
-
[in] | sa_org | 設定するsigaction値。 |
- Returns
- 成功時は0、失敗時には-1を返す。
static int setup_sigalrm_handler |
( |
struct sigaction * |
sa_org | ) |
|
|
static |
SIGALRMのシグナルハンドラを変更する。
- Parameters
-
[out] | sa_org | 変更前のsigaction値。 |
- Returns
- 成功時は0、失敗時には-1を返す。