Пример #1
0
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));
}
Пример #2
0
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;
}
Пример #3
0
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));
}
Пример #4
0
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));
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
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;
}
Пример #8
0
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));
}
Пример #9
0
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;
}
Пример #10
0
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;
}