今天:
1, 继续测试外部控制,遇到点问题.
2, 测试 stat lstat api
问题:
[root@111 ~/workshop1]$cat 1.c
/*
* test1.c
*
* Harry Wei <harry...@gmail.com>
*/
#include <glib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include "api/hlfs.h"
static char *build_ctrl_region(const char *testfs)
{
int fd, offset;
// CTRL_REGION_T ctrl_region;
char ctrl_region_file[128];
char *addr = NULL;
g_message("enter func %s\n", __func__);
sprintf(ctrl_region_file, "%s%s%s", "/var/xen/", testfs, "-ctrl");
g_message("77 dbg ctrl_region_file is %s\n", ctrl_region_file);
g_remove(ctrl_region_file);
fd = open(ctrl_region_file, O_RDWR | O_CREAT, 0666);
g_message("77 1 dbg pass here\n");
if (fd == -1) {
g_message("%s -- open failed\n", __func__);
return NULL;
}
g_message("77 2 dbg pass here\n");
offset = sysconf(_SC_PAGE_SIZE);
g_message("_SC_PAGE_SIZE is %d\n", offset);
if (-1 == write(fd, "", 1)) {
g_message("%s -- write error!\n", __func__);
return NULL;
}
addr = mmap(NULL, sysconf(_SC_PAGE_SIZE), PROT_WRITE, MAP_SHARED, fd, 0);
g_message("77 3 dbg pass here\n");
if (addr == NULL) {
g_message("%s -- mmap failed!\n", __func__);
return NULL;
}
g_message("leave func %s\n", __func__);
return addr;
}
int main(int argc, char **argv) {
char *ctrl_region = NULL;
#if 0 //This is ok!!!
ctrl_region = build_ctrl_region("testfs");
while (1) {
g_message("%s -- is_start_clean is %d, copy_waterlevel is %d\n", __func__,
g_atomic_int_get(&((CTRL_REGION_T *)ctrl_region)->is_start_clean),
g_atomic_int_get(&((CTRL_REGION_T *)ctrl_region)->copy_waterlevel));
sleep(1);
}
#endif
#if 1 //This is not ok!!! segment fault!!!
CTRL_REGION_T *ctrl_region1 = NULL;
ctrl_region = build_ctrl_region("testfs");
g_message("ctrl_region's addr is %p\n", ctrl_region);
g_atomic_pointer_set((CTRL_REGION_T *)ctrl_region, ctrl_region1);
g_message("ctrl_region1's addr is %p\n", ctrl_region1);
while (1) {
g_message("%s -- is_start_clean is %d, copy_waterlevel is %d\n", __func__,
g_atomic_int_get(&ctrl_region1->is_start_clean),
g_atomic_int_get(&ctrl_region1->copy_waterlevel));
sleep(1);
}
#endif
return 0;
}
[root@111 ~/workshop1]$cat Makefile
HLFS_DIR = /hlfs
HLFS_LOG = $(HLFS_DIR)/3part/log
GLIB_DIR1 = /usr/lib/glib-2.0/include
GLIB_DIR2 = /usr/include/glib-2.0
#GLIB = /lib64
IBIN = test
CFLAGS += -Werror -g -O0
CFLAGS += -Wno-unused
CFLAGS += -fno-strict-aliasing
CFLAGS += -I $(HLFS_DIR)/src/include
CFLAGS += -I $(GLIB_DIR1)
CFLAGS += -I $(GLIB_DIR2)
CFLAGS += -I $(HLFS_LOG)/include
ifeq ($(CONFIG_X86_64),y)
CFLAGS += -fPIC
endif
LIBS += -L$(HLFS_DIR)/output/lib64/ -lhlfs
#LIBS += -L$(GLIB) -lglib-2.0
LIBS += -L$(HLFS_LOG)/lib64 -llog4c
test: 1.c
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
[root@111 ~/workshop1]$make
cc -Werror -g -O0 -Wno-unused -fno-strict-aliasing -I
/hlfs/src/include -I /usr/lib/glib-2.0/include -I
/usr/include/glib-2.0 -I /hlfs/3part/log/include -o test 1.c
-L/hlfs/output/lib64/ -lhlfs -L/hlfs/3part/log/lib64 -llog4c
[root@111 ~/workshop1]$./test
** Message: enter func build_ctrl_region
** Message: 77 dbg ctrl_region_file is /var/xen/testfs-ctrl
** Message: 77 1 dbg pass here
** Message: 77 2 dbg pass here
** Message: _SC_PAGE_SIZE is 4096
** Message: 77 3 dbg pass here
** Message: leave func build_ctrl_region
** Message: ctrl_region's addr is 0x7f5e57e22000
** Message: ctrl_region1's addr is (nil)
段错误
分析:
g_atomic_pointer_set有问题,正在测试问题的所在。
--
Thanks
Harry Wei