summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2011-09-28 15:41:58 +0200
committerWerner Koch <wk@gnupg.org>2011-09-28 15:41:58 +0200
commited8e267859a00233fee89a6b1b7fb3d74ceced96 (patch)
treee74d7b7af18297021f1e7548899d07badb464a0a
parentAllow arbitrary timeouts with dotlock. (diff)
downloadgnupg2-ed8e267859a00233fee89a6b1b7fb3d74ceced96.tar.xz
gnupg2-ed8e267859a00233fee89a6b1b7fb3d74ceced96.zip
Add a flag parameter to dotlock_create.
This allows us to extend this function in the future.
-rw-r--r--common/ChangeLog1
-rw-r--r--common/asshelp.c2
-rw-r--r--common/dotlock.c25
-rw-r--r--common/dotlock.h4
-rw-r--r--common/t-dotlock.c4
-rw-r--r--g10/gpg.c2
-rw-r--r--g10/gpgv.c3
-rw-r--r--g10/keydb.c2
-rw-r--r--g10/keyring.c2
-rw-r--r--g10/tdbio.c6
-rw-r--r--g13/create.c2
-rw-r--r--g13/g13.c2
-rw-r--r--g13/mount.c2
-rw-r--r--sm/gpgsm.c2
-rw-r--r--sm/keydb.c2
15 files changed, 37 insertions, 24 deletions
diff --git a/common/ChangeLog b/common/ChangeLog
index 0f66a4122..da016bd7c 100644
--- a/common/ChangeLog
+++ b/common/ChangeLog
@@ -2,6 +2,7 @@
* dotlock.c (dotlock_take, dotlock_take_unix, dotlock_take_w32):
Implement arbitrary timeout values.
+ (dotlock_create): Add arg FLAGS for future extensions.
2011-09-27 Werner Koch <wk@g10code.com>
diff --git a/common/asshelp.c b/common/asshelp.c
index 96d9a242a..c5d8bdf84 100644
--- a/common/asshelp.c
+++ b/common/asshelp.c
@@ -287,7 +287,7 @@ lock_spawning (lock_spawn_t *lock, const char *homedir, const char *name,
if (!fname)
return gpg_error_from_syserror ();
- *lock = dotlock_create (fname);
+ *lock = dotlock_create (fname, 0);
xfree (fname);
if (!*lock)
return gpg_error_from_syserror ();
diff --git a/common/dotlock.c b/common/dotlock.c
index e3e9fa3d2..37a1df3c6 100644
--- a/common/dotlock.c
+++ b/common/dotlock.c
@@ -53,7 +53,7 @@
At program initialization time, the module should be explicitly
initialized:
- dotlock_create (NULL);
+ dotlock_create (NULL, 0);
This installs an atexit handler and may also initialize mutex etc.
It is optional for non-threaded applications. Only the first call
@@ -64,7 +64,7 @@
dotlock_t h
- h = dotlock_create (fname);
+ h = dotlock_create (fname, 0);
if (!h)
error ("error creating lock file: %s\n", strerror (errno));
@@ -656,17 +656,19 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
#ifdef HAVE_W32CE_SYSTEM
wchar_t *wname = utf8_to_wchar (h->lockname);
- h->lockhd = INVALID_HANDLE_VALUE;
if (wname)
h->lockhd = CreateFile (wname,
+ GENERIC_READ|GENERIC_WRITE,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL, OPEN_ALWAYS, 0, NULL);
+ else
+ h->lockhd = INVALID_HANDLE_VALUE;
+ jnlib_free (wname);
#else
h->lockhd = CreateFile (h->lockname,
-#endif
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_ALWAYS, 0, NULL);
-#ifdef HAVE_W32CE_SYSTEM
- jnlib_free (wname);
#endif
}
if (h->lockhd == INVALID_HANDLE_VALUE)
@@ -696,12 +698,15 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
POSIX systems a temporary file ".#lk.<hostname>.pid[.threadid] is
used.
+ FLAGS must be 0.
+
The function returns an new handle which needs to be released using
destroy_dotlock but gets also released at the termination of the
process. On error NULL is returned.
*/
+
dotlock_t
-dotlock_create (const char *file_to_lock)
+dotlock_create (const char *file_to_lock, unsigned int flags)
{
static int initialized;
dotlock_t h;
@@ -715,6 +720,12 @@ dotlock_create (const char *file_to_lock)
if ( !file_to_lock )
return NULL; /* Only initialization was requested. */
+ if (flags)
+ {
+ jnlib_set_errno (EINVAL);
+ return NULL;
+ }
+
h = jnlib_calloc (1, sizeof *h);
if (!h)
return NULL;
diff --git a/common/dotlock.h b/common/dotlock.h
index 5fb7891fa..666d0b72c 100644
--- a/common/dotlock.h
+++ b/common/dotlock.h
@@ -26,8 +26,8 @@ struct dotlock_handle;
typedef struct dotlock_handle *dotlock_t;
void dotlock_disable (void);
-dotlock_t dotlock_create (const char *file_to_lock);
-void dotlock_destroy ( dotlock_t h );
+dotlock_t dotlock_create (const char *file_to_lock, unsigned int flags);
+void dotlock_destroy (dotlock_t h);
int dotlock_take (dotlock_t h, long timeout);
int dotlock_release (dotlock_t h);
void dotlock_remove_lockfiles (void);
diff --git a/common/t-dotlock.c b/common/t-dotlock.c
index a352f6e95..f81b95276 100644
--- a/common/t-dotlock.c
+++ b/common/t-dotlock.c
@@ -90,7 +90,7 @@ lock_and_unlock (const char *fname)
{
dotlock_t h;
- h = dotlock_create (fname);
+ h = dotlock_create (fname, 0);
if (!h)
die ("error creating lock file for `%s': %s", fname, strerror (errno));
inf ("lock created");
@@ -129,7 +129,7 @@ main (int argc, char **argv)
sigaction (SIGINT, &nact, NULL);
}
- dotlock_create (NULL); /* Initialize (optional). */
+ dotlock_create (NULL, 0); /* Initialize (optional). */
lock_and_unlock (fname);
diff --git a/g10/gpg.c b/g10/gpg.c
index 51661b366..c31a55863 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -1969,7 +1969,7 @@ main (int argc, char **argv)
gnupg_init_signals (0, emergency_cleanup);
- dotlock_create (NULL); /* Register lock file cleanup. */
+ dotlock_create (NULL, 0); /* Register lock file cleanup. */
opt.session_env = session_env_new ();
if (!opt.session_env)
diff --git a/g10/gpgv.c b/g10/gpgv.c
index 9328343a1..8ca675289 100644
--- a/g10/gpgv.c
+++ b/g10/gpgv.c
@@ -507,9 +507,10 @@ dotlock_disable (void)
}
dotlock_t
-dotlock_create (const char *file_to_lock)
+dotlock_create (const char *file_to_lock, unsigned int flags)
{
(void)file_to_lock;
+ (void)flags;
return NULL;
}
diff --git a/g10/keydb.c b/g10/keydb.c
index e4b97096f..9b9b2ed5f 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -136,7 +136,7 @@ maybe_create_keyring (char *filename, int force)
/* To avoid races with other instances of gpg trying to create or
update the keyring (it is removed during an update for a short
time), we do the next stuff in a locked state. */
- lockhd = dotlock_create (filename);
+ lockhd = dotlock_create (filename, 0);
if (!lockhd)
{
/* A reason for this to fail is that the directory is not
diff --git a/g10/keyring.c b/g10/keyring.c
index 480c0e9bd..4eb26aab6 100644
--- a/g10/keyring.c
+++ b/g10/keyring.c
@@ -306,7 +306,7 @@ keyring_lock (KEYRING_HANDLE hd, int yes)
if (!keyring_is_writable(kr))
continue;
if (!kr->lockhd) {
- kr->lockhd = dotlock_create( kr->fname );
+ kr->lockhd = dotlock_create (kr->fname, 0);
if (!kr->lockhd) {
log_info ("can't allocate lock for `%s'\n", kr->fname );
rc = G10ERR_GENERAL;
diff --git a/g10/tdbio.c b/g10/tdbio.c
index 968d06b3c..1ab11f2e7 100644
--- a/g10/tdbio.c
+++ b/g10/tdbio.c
@@ -544,7 +544,7 @@ tdbio_set_dbname( const char *new_dbname, int create )
db_name = fname;
#ifdef __riscos__
if( !lockhandle )
- lockhandle = dotlock_create (db_name);
+ lockhandle = dotlock_create (db_name, 0);
if( !lockhandle )
log_fatal( _("can't create lock for `%s'\n"), db_name );
if( dotlock_make (lockhandle, -1) )
@@ -567,7 +567,7 @@ tdbio_set_dbname( const char *new_dbname, int create )
#ifndef __riscos__
if( !lockhandle )
- lockhandle = dotlock_create (db_name);
+ lockhandle = dotlock_create (db_name, 0);
if( !lockhandle )
log_fatal( _("can't create lock for `%s'\n"), db_name );
#endif /* !__riscos__ */
@@ -608,7 +608,7 @@ open_db()
assert( db_fd == -1 );
if (!lockhandle )
- lockhandle = dotlock_create (db_name);
+ lockhandle = dotlock_create (db_name, 0);
if (!lockhandle )
log_fatal( _("can't create lock for `%s'\n"), db_name );
#ifdef __riscos__
diff --git a/g13/create.c b/g13/create.c
index 60c1d3d31..f907ddbf6 100644
--- a/g13/create.c
+++ b/g13/create.c
@@ -246,7 +246,7 @@ g13_create_container (ctrl_t ctrl, const char *filename, strlist_t keys)
/* Take a lock and proceed with the creation. If there is a lock we
immediately return an error because for creation it does not make
sense to wait. */
- lock = dotlock_create (filename);
+ lock = dotlock_create (filename, 0);
if (!lock)
return gpg_error_from_syserror ();
if (dotlock_take (lock, 0))
diff --git a/g13/g13.c b/g13/g13.c
index 972a7eaaf..8e5532c47 100644
--- a/g13/g13.c
+++ b/g13/g13.c
@@ -383,7 +383,7 @@ main ( int argc, char **argv)
gnupg_init_signals (0, emergency_cleanup);
- dotlock_create (NULL); /* Register locking cleanup. */
+ dotlock_create (NULL, 0); /* Register locking cleanup. */
opt.session_env = session_env_new ();
if (!opt.session_env)
diff --git a/g13/mount.c b/g13/mount.c
index 198fde076..62eeca1f7 100644
--- a/g13/mount.c
+++ b/g13/mount.c
@@ -273,7 +273,7 @@ g13_mount_container (ctrl_t ctrl, const char *filename, const char *mountpoint)
}
/* Try to take a lock. */
- lock = dotlock_create (filename);
+ lock = dotlock_create (filename, 0);
if (!lock)
{
xfree (mountpoint_buffer);
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 87f94e210..dc9f2e032 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -928,7 +928,7 @@ main ( int argc, char **argv)
gnupg_init_signals (0, emergency_cleanup);
- dotlock_create (NULL); /* Register lockfile cleanup. */
+ dotlock_create (NULL, 0); /* Register lockfile cleanup. */
opt.session_env = session_env_new ();
if (!opt.session_env)
diff --git a/sm/keydb.c b/sm/keydb.c
index 9d1a6ef01..86301b337 100644
--- a/sm/keydb.c
+++ b/sm/keydb.c
@@ -214,7 +214,7 @@ keydb_add_resource (const char *url, int force, int secret, int *auto_created)
all_resources[used_resources].secret = secret;
all_resources[used_resources].lockhandle
- = dotlock_create (filename);
+ = dotlock_create (filename, 0);
if (!all_resources[used_resources].lockhandle)
log_fatal ( _("can't create lock for `%s'\n"), filename);