Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb92c8ac

Browse files
committed
Add internal funciton Handle_init(). Rewrite AGMDB_openDB(), AGMDB_closeDB() and AGMDB_destroyDB().
1 parent3f44277 commitb92c8ac

File tree

2 files changed

+108
-31
lines changed

2 files changed

+108
-31
lines changed

‎apache2/ag_mdb/ag_mdb.cpp‎

Lines changed: 100 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,26 @@ unsigned int AGMDB_hash(const char* key, int key_len, unsigned int output_val_ra
779779
return hash;
780780
}
781781

782+
/**
783+
** Initialize the handle of AG Memory Database.
784+
** @param dbm: the handle of AG Memory Database.
785+
** return: if AGMDB_SUCCESS if success
786+
** or AGMDB_ERROR if the handle is NULL.
787+
*/
788+
intHandle_init(structagmdb_handler* dbm) {
789+
if (dbm ==NULL)
790+
return AGMDB_ERROR_HANDLE_NULL;
791+
dbm->shm_base =NULL;
792+
#ifndef _WIN32
793+
dbm->linux_shm_id = -1;
794+
dbm->db_lock.sem_id = -1;
795+
#else
796+
dbm->win_shm_handle = INVALID_HANDLE_VALUE;
797+
dbm->db_lock.read_lock_handle = INVALID_HANDLE_VALUE;
798+
dbm->db_lock.write_lock_handle = INVALID_HANDLE_VALUE;
799+
#endif
800+
return AGMDB_SUCCESS;
801+
}
782802

783803
/**
784804
**========================================================
@@ -996,63 +1016,112 @@ inline int AGMDB_deleteEntry(CPTR_VOID shm_base, PTR_OFFSET entry_id) {
9961016
** return: AGMDB_SUCCESS if successfully created or AGMDB_ERROR if failed.
9971017
*/
9981018
intAGMDB_openDB(structagmdb_handler* dbm,constchar* db_name,int db_name_length,unsignedint entry_num) {
999-
int rc;
1000-
PTR_VOID shm_base;
1019+
intrc = AGMDB_SUCCESS;
1020+
int rc_shm = AGMDB_SUCCESS;
10011021

1002-
if (dbm ==NULL)
1003-
return AGMDB_ERROR_HANDLE_NULL;
1004-
if (db_name ==NULL)
1022+
rc =Handle_init(dbm);
1023+
if (rc != AGMDB_SUCCESS) {
1024+
return rc;
1025+
}
1026+
1027+
/* Check the format of db_name*/
1028+
if (db_name ==NULL) {
10051029
return AGMDB_ERROR_NAME_NULL;
1006-
if (db_name_length <=0)
1030+
}
1031+
elseif (db_name_length <=0) {
10071032
return AGMDB_ERROR_NAME_INVALID_STRING;
1008-
1009-
1010-
// Check the format of db_name
1011-
if (AGMDB_isstring(db_name, db_name_length) == AGMDB_ERROR) {
1033+
}
1034+
elseif (AGMDB_isstring(db_name, db_name_length) == AGMDB_ERROR) {
10121035
return AGMDB_ERROR_NAME_INVALID_STRING;
10131036
}
10141037

1038+
/* Create or open the shared memory*/
10151039
rc =SHM_create(dbm, db_name, db_name_length, entry_num);
1016-
if ((rc != AGMDB_SUCCESS_SHM_CREATE) && (rc != AGMDB_SUCCESS_SHM_OPEN))
1040+
if (AGMDB_isError(rc)) {
10171041
return rc;
1042+
}
1043+
elseif (rc != AGMDB_SUCCESS_SHM_CREATE && rc != AGMDB_SUCCESS_SHM_OPEN) {
1044+
return AGMDB_ERROR_UNEXPECTED;
1045+
}
1046+
rc_shm = rc;
10181047

1048+
/* Create or open the lock*/
10191049
rc =Lock_create(&(dbm->db_lock), db_name, db_name_length);
1020-
if ((rc != AGMDB_SUCCESS_LOCK_CREATE) && (rc != AGMDB_SUCCESS_LOCK_OPEN))
1050+
if (AGMDB_isError(rc))
1051+
{
1052+
if (rc_shm == AGMDB_SUCCESS_SHM_CREATE) {
1053+
SHM_destroy(dbm);
1054+
}
1055+
elseif (rc_shm == AGMDB_SUCCESS_SHM_OPEN) {
1056+
SHM_close(dbm);
1057+
}
10211058
return rc;
1059+
}
1060+
elseif (rc != AGMDB_SUCCESS_LOCK_CREATE && rc != AGMDB_SUCCESS_LOCK_OPEN) {
1061+
if (rc_shm == AGMDB_SUCCESS_SHM_CREATE) {
1062+
SHM_destroy(dbm);
1063+
}
1064+
elseif (rc_shm == AGMDB_SUCCESS_SHM_OPEN) {
1065+
SHM_close(dbm);
1066+
}
1067+
return AGMDB_ERROR_UNEXPECTED;
1068+
}
10221069

1023-
return AGMDB_SUCCESS;
1070+
if (rc_shm == AGMDB_SUCCESS_SHM_CREATE) {
1071+
return AGMDB_SUCCESS_DB_CREATE;
1072+
}
1073+
else {
1074+
return AGMDB_SUCCESS_DB_OPEN;
1075+
}
10241076
}
10251077

10261078
/**
1027-
** Close and destroy a database.
1028-
** @param dbm: the database you want to destroy.
1029-
** return: AGMDB_SUCCESS if successfully destroyed or AGMDB_ERROR if failed.
1030-
*/
1079+
** Close and destroy a database.
1080+
** @param dbm: the database you want to destroy.
1081+
** return: AGMDB_SUCCESS if successfully destroyed or AGMDB_ERROR if failed.
1082+
*/
10311083
intAGMDB_destroyDB(structagmdb_handler *dbm) {
1032-
int rc;
1084+
int rc = AGMDB_SUCCESS;
1085+
int rc_shm = AGMDB_SUCCESS;
1086+
int rc_lock = AGMDB_SUCCESS;
1087+
10331088
if (dbm ==NULL)
10341089
return AGMDB_ERROR_HANDLE_NULL;
1035-
rc =SHM_destroy(dbm);
1036-
if (rc != AGMDB_SUCCESS)
1090+
1091+
rc =AGMDB_closeDB(dbm);
1092+
if (AGMDB_isError(rc))
10371093
return rc;
10381094

1039-
returnLock_destroy(&(dbm->db_lock));
1095+
rc_shm =SHM_destroy(dbm);
1096+
rc_lock =Lock_destroy(&(dbm->db_lock));
1097+
if (AGMDB_isError(rc_shm))
1098+
return rc_shm;
1099+
elseif (AGMDB_isError(rc_lock))
1100+
return rc_lock;
1101+
else
1102+
return AGMDB_SUCCESS;
10401103
}
10411104

10421105
/**
1043-
** Close a database, but does not destroy it.
1044-
** @param dbm: the database you want to close.
1045-
** return: AGMDB_SUCCESS if successfully closed or AGMDB_ERROR if failed.
1046-
*/
1106+
** Close a database, but does not destroy it.
1107+
** @param dbm: the database you want to close.
1108+
** return: AGMDB_SUCCESS if successfully closed or AGMDB_ERROR if failed.
1109+
*/
10471110
intAGMDB_closeDB(structagmdb_handler *dbm) {
1048-
int rc;
1111+
int rc_shm = AGMDB_SUCCESS;
1112+
int rc_lock = AGMDB_SUCCESS;
1113+
10491114
if (dbm ==NULL)
10501115
return AGMDB_ERROR_HANDLE_NULL;
1051-
rc =SHM_close(dbm);
1052-
if (rc != AGMDB_SUCCESS)
1053-
return rc;
1054-
1055-
returnLock_close(&(dbm->db_lock));
1116+
1117+
rc_shm =SHM_close(dbm);
1118+
rc_lock =Lock_close(&(dbm->db_lock));
1119+
if (AGMDB_isError(rc_shm))
1120+
return rc_shm;
1121+
elseif (AGMDB_isError(rc_lock))
1122+
return rc_lock;
1123+
else
1124+
return AGMDB_SUCCESS;
10561125
}
10571126

10581127
/**

‎apache2/ag_mdb/ag_mdb_internal.h‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,14 @@ int AGMDB_isstring(const char* str, int str_len);
422422
*/
423423
unsignedintAGMDB_hash(constchar*key,intkey_len,unsignedintoutput_val_range);
424424

425+
/**
426+
** Initialize the handle of AG Memory Database.
427+
** @param dbm: the handle of AG Memory Database.
428+
** return: if AGMDB_SUCCESS if success
429+
** or AGMDB_ERROR if the handle is NULL.
430+
*/
431+
intHandle_init(structagmdb_handler*dbm);
432+
425433
#ifdef__cplusplus
426434
}
427435
#endif

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp