TEST_F(MgrTest, object_free) { CPE_HS_DEF_VAR(className, "class1"); addClass("class1", 20); gd_om_oid_t oid = obj_alloc(className); EXPECT_TRUE(oid != GD_OM_INVALID_OID); void * objData = gd_om_obj_get(m_omm, oid, t_em()); ASSERT_TRUE(objData); gd_om_obj_free(m_omm, oid, t_em()); EXPECT_TRUE(NULL == gd_om_obj_get(m_omm, oid, t_em())); EXPECT_EQ(oid, obj_alloc(className)); }
int udp_listener_init(struct udp_listener *u, struct poller *p, const endpoint_t *ep, udp_listener_callback_t func, struct obj *obj) { struct poller_item i; struct udp_listener_callback *cb; cb = obj_alloc("udp_listener_callback", sizeof(*cb), NULL); cb->func = func; cb->p = obj_get_o(obj); cb->ul = u; if (open_socket(&u->sock, SOCK_DGRAM, ep->port, &ep->address)) goto fail; ipv6only(u->sock.fd, 1); ZERO(i); i.fd = u->sock.fd; i.closed = udp_listener_closed; i.readable = udp_listener_incoming; i.obj = &cb->obj; if (poller_add_item(p, &i)) goto fail; return 0; fail: close_socket(&u->sock); obj_put_o(obj); obj_put(cb); return -1; }
TEST_F(MgrTest, object_alloc_no_class) { CPE_HS_DEF_VAR(className, "not-exist-class"); EXPECT_EQ(GD_OM_INVALID_OID, obj_alloc(className)); EXPECT_TRUE(t_em_have_errno(gd_om_class_not_exist)); }
TEST_F(MgrTest, object_size) { CPE_HS_DEF_VAR(className, "class1"); addClass("class1", 20); gd_om_oid_t oid1 = obj_alloc(className); EXPECT_TRUE(oid1 != GD_OM_INVALID_OID); void * objData1 = gd_om_obj_get(m_omm, oid1, t_em()); ASSERT_TRUE(objData1); gd_om_oid_t oid2 = obj_alloc(className); EXPECT_TRUE(oid2 != GD_OM_INVALID_OID); void * objData2 = gd_om_obj_get(m_omm, oid2, t_em()); ASSERT_TRUE(objData2); EXPECT_EQ(1, (int)(oid2 - oid1)); EXPECT_EQ(20, (int)((char*)objData2 - (char*)objData1)); }
static sprite_t *create(void) { sprite_t *s; s = obj_alloc(sizeof(mech_sprite_t), &draco.object_type); mech_defaults((mech_sprite_t *)s); ((mech_sprite_t *)s)->rmass = 0.2; ((mech_sprite_t *)s)->gravity = 0.1; s->flags |= SPRITE_PAUSED; s->state = DRACO_GLIDE; s->animation = anim; return s; }
static sprite_t *create(void) { sprite_t *s = obj_alloc(sizeof(*s),&cloud.object_type); switch(get_random() % 2) { case 0: s->animation = drift1; break; case 1: s-> animation = drift2; break; } return s; }
struct object * pic_obj_alloc_unsafe(pic_state *pic, int type) { struct object *obj; if (pic->heap->pages == NULL) { heap_morecore(pic); } #if GC_STRESS pic_gc(pic); #endif obj = obj_alloc(pic, type); if (obj == NULL) { pic_gc(pic); obj = obj_alloc(pic, type); if (obj == NULL) pic_panic(pic, "GC memory exhausted"); } return obj; }
TEST_F(MgrTest, object_alloc_basic) { CPE_HS_DEF_VAR(className, "class1"); addClass("class1", 20); gd_om_oid_t oid = obj_alloc(className); EXPECT_TRUE(oid != GD_OM_INVALID_OID); void * objData = gd_om_obj_get(m_omm, oid, t_em()); ASSERT_TRUE(objData); gd_om_class_t cls = gd_om_obj_class(m_omm, oid, t_em()); ASSERT_TRUE(cls); EXPECT_STREQ("class1", gd_om_class_name(cls)); }
static int __init init( void ) { int i; long tst = 0, sum = 0; if( mode != 0 && mode != 1 ) { printk( KERN_ERR "illegal mode value\n" ); return -EINVAL; } if( !( line = kmalloc( sizeof(void*) * number, GFP_KERNEL ) ) ) { printk( KERN_ERR "kmalloc error\n" ); goto mout; } for( i = 0; i < number; i++ ) line[ i ] = NULL; if( !( pool = pool_create() ) ) { printk( KERN_ERR "pool create error\n" ); goto pout; }; printk( KERN_INFO "pool created\n" ); printk( KERN_INFO "%d objects in pool before allocation\n", pool->curr_nr ); for( i = 0; i < number; i++ ) { cycles_t t1, t2; schedule(); t1 = get_cycles(); if( !( line[ i ] = obj_alloc() ) ) { printk( KERN_ERR "object allocation error\n" ); goto oout; } t2 = get_cycles(); sum += ( t2 - t1 ); } sum /= number; for( i = 0; i < number; i++ ) tst += ( obj_test( line[ i ], i ) ? 1 : 0 ); printk( KERN_INFO "%d objects in pool after allocation\n", pool->curr_nr ); printk( KERN_INFO "allocate %ld objects (size %ld) in %ld cycles\n", number, size, sum ); printk( KERN_INFO "tested OK objects: %ld\n", tst ); for( i = 0; i < number; i++ ) obj_free( line[ i ] ); pool_destroy(); printk( KERN_INFO "pool destroyed\n" ); kfree( line ); return -1; //0; oout: for( i = 0; i < number; i++ ) obj_free( line[ i ] ); pout: pool_destroy(); mout: kfree( line ); return -ENOMEM; }
int udp_listener_init(struct udp_listener *u, struct poller *p, struct in6_addr ip, u_int16_t port, udp_listener_callback_t func, struct obj *obj) { struct sockaddr_in6 sin; struct poller_item i; struct udp_listener_callback *cb; cb = obj_alloc("udp_listener_callback", sizeof(*cb), NULL); cb->func = func; cb->p = obj_get_o(obj); u->fd = socket(AF_INET6, SOCK_DGRAM, 0); if (u->fd == -1) goto fail; nonblock(u->fd); reuseaddr(u->fd); ipv6only(u->fd, 0); ZERO(sin); sin.sin6_family = AF_INET6; sin.sin6_addr = ip; sin.sin6_port = htons(port); if (bind(u->fd, (struct sockaddr *) &sin, sizeof(sin))) goto fail; ZERO(i); i.fd = u->fd; i.closed = udp_listener_closed; i.readable = udp_listener_incoming; i.obj = &cb->obj; if (poller_add_item(p, &i)) goto fail; return 0; fail: if (u->fd != -1) close(u->fd); obj_put_o(obj); obj_put(cb); return -1; }