aboutsummaryrefslogtreecommitdiff
path: root/vos.c
diff options
context:
space:
mode:
authorM.Shulhan <ms@kilabit.org>2009-04-05 17:52:57 +0700
committerM.Shulhan <ms@kilabit.org>2009-04-05 17:52:57 +0700
commit19c3ee85ea45c5b5c2a479af17b86ba65d52673b (patch)
tree2bf8fe1e94691e85d2c19adea8a42240586c5862 /vos.c
parent459cd2d7715baea5a56090b3331f0b9b95e832c2 (diff)
downloadvos-19c3ee85ea45c5b5c2a479af17b86ba65d52673b.tar.xz
fix sort process.
type/vos_TStmtJoin: - deleted, merge into vos_TStmtMeta.h op/vos_File: - file_open: fix memory leak on open fail. - file_raw_copy: new, function to copy file. - file_raw_get_dirname: new, function to get directory name from path. op/vos_Stmt: - stmt_find_by_name: re-structure the switch. - stmt_update_meta: new, update meta filename to the last output name. op/vos_StmtSort: - stmtsort_create: remove free sort->in. - stmtsort_init_output: split into stmtsort_init. - stmtsort_init: new. - stmtsort_destroy: remove unused temporary sort file. proc/vos_create: - vos_process_create: update meta object before processing. proc/vos_join: - change affect by split of stmtsort_init_output. proc/vos_parser: - use 'filename' as an alias if alias is not set in statement. proc/vos_sort: - vos_process_sort: fix bug in sort process. when input file is splitted into several thread and the first split is precisely end in a new-line character, this can cause losing of one row in the output file. - sort_write: use 'get_tmp_dir()' to get temporary directory. proc/vos_sort_merge: - vos_sort_merge: simplified the merge process if only one file to be merged. - single_merge: new. vos: - get_tmp_dir: new, function to get temporary directory.
Diffstat (limited to 'vos.c')
-rw-r--r--vos.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/vos.c b/vos.c
index c71cb27..12b29b5 100644
--- a/vos.c
+++ b/vos.c
@@ -34,6 +34,38 @@ int get_token_idx(const char **ls, const unsigned int n, const char *tok)
return i;
}
+/**
+ * @desc: get one of the temporary directory from the list of temporary
+ * directories.
+ *
+ * @return:
+ * < tmp_dir : a path to random temporary directory.
+ */
+char *get_tmp_dir(const int lock)
+{
+ int s;
+ char *tmp_dir = 0;
+
+ if (_vos.proc_max > 1 && lock) {
+ do {
+ s = pthread_mutex_trylock(&_vos.proc_tmp_dir_lock);
+ } while (s);
+ }
+
+ tmp_dir = _vos.p_proc_tmp_dir->str;
+
+ /* to the next temporary dir */
+ _vos.p_proc_tmp_dir = _vos.p_proc_tmp_dir->next;
+ if (! _vos.p_proc_tmp_dir)
+ _vos.p_proc_tmp_dir = _vos.proc_tmp_dir;
+
+ if (_vos.proc_max > 1 && lock) {
+ pthread_mutex_unlock(&_vos.proc_tmp_dir_lock);
+ }
+
+ return tmp_dir;
+}
+
static int vos_init(int argc, char **argv)
{
int i = 1;