TimeManager
Macros | Functions | Variables
lock.c File Reference

データベース書き換えロックに関する実装。 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"

Macros

#define DEFAULT_TIMEOUT   5
 
#define EXIT_TIMEDOUT   3
 

Functions

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...
 

Variables

static int verbose = 0
 

Detailed Description

データベース書き換えロックに関する実装。

Macro Definition Documentation

#define DEFAULT_TIMEOUT   5

セマフォ取得待ちのタイムアウトのデフォルト値。(sec)

#define EXIT_TIMEDOUT   3

タイムアウトした場合の終了ステータス

Function Documentation

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]argcargc値
[in]argvargv値
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]argcargc値
[in]argvargv値
[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を返す。