Skip to content

Commit f5e818f

Browse files
committed
Install libuv in travis
1 parent 6c823ee commit f5e818f

File tree

4 files changed

+22
-16
lines changed

4 files changed

+22
-16
lines changed

.travis.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
os: linux
2-
dist: xenial
2+
dist: bionic
33
language: scala
44
branches:
55
only:
@@ -10,8 +10,12 @@ jdk:
1010
- openjdk8
1111
before_cache:
1212
- find $HOME/.sbt -name "*.lock" -print -delete
13-
compiler: clang
14-
script: sbt test
13+
before_install:
14+
# Install libuv
15+
- sudo apt-get update
16+
- sudo apt-get install -y libuv1-dev
17+
script:
18+
- sbt test
1519
cache:
1620
directories:
1721
- $HOME/.sbt

core/src/main/scala/scala/scalanative/loop/Eventloop.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,6 @@ object LibUV {
7878
def uv_loop_close(loop: Loop): CInt = extern
7979
def uv_is_active(handle: Ptr[Byte]): Int = extern
8080
def uv_handle_size(h_type: Int): CSize = extern
81-
def uv_handle_get_data(handle: Ptr[Byte]): Long = extern
82-
def uv_handle_set_data(handle: Ptr[Byte], data: Long): Unit = extern
8381
def uv_req_size(r_type: Int): CSize = extern
8482
def uv_prepare_init(loop: Loop, handle: PrepareHandle): Int = extern
8583
def uv_prepare_start(handle: PrepareHandle, cb: PrepareCB): Int = extern

core/src/main/scala/scala/scalanative/loop/internals/HandleUtils.scala

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
package scala.scalanative.loop
22
package internals
33

4+
import scala.scalanative.runtime._
45
import scala.scalanative.runtime.Intrinsics._
56
import scala.scalanative.unsafe.Ptr
67
import scala.scalanative.libc.stdlib
78
import scala.collection.mutable
89
import LibUV._
910

1011
private[loop] object HandleUtils {
11-
private val references = mutable.Map.empty[Long, Int]
12+
private val references = mutable.Map.empty[Object, Int]
1213

1314
@inline def getData[T <: Object](handle: Ptr[Byte]): T = {
14-
val data = LibUV.uv_handle_get_data(handle)
15-
val rawptr = castLongToRawPtr(data)
15+
// data is the first member of uv_loop_t
16+
val ptrOfPtr = handle.asInstanceOf[Ptr[Ptr[Byte]]]
17+
val rawptr = toRawPtr(!ptrOfPtr)
1618
castRawPtrToObject(rawptr).asInstanceOf[T]
1719
}
18-
@inline def setData[T <: Object](handle: Ptr[Byte], function: T): Unit = {
19-
val rawptr = castObjectToRawPtr(function)
20-
val data = castRawPtrToLong(rawptr)
21-
if (references.contains(data)) references(data) += 1
22-
else references(data) = 1
23-
LibUV.uv_handle_set_data(handle, data)
20+
@inline def setData(handle: Ptr[Byte], obj: Object): Unit = {
21+
if (references.contains(obj)) references(obj) += 1
22+
else references(obj) = 1
23+
24+
// data is the first member of uv_loop_t
25+
val ptrOfPtr = handle.asInstanceOf[Ptr[Ptr[Byte]]]
26+
val rawptr = castObjectToRawPtr(obj)
27+
!ptrOfPtr = fromRawPtr[Byte](rawptr)
2428
}
2529
private val onCloseCB = new CloseCB {
2630
def apply(handle: UVHandle): Unit = {
@@ -29,7 +33,7 @@ private[loop] object HandleUtils {
2933
}
3034
@inline def close(handle: Ptr[Byte]): Unit = {
3135
uv_close(handle, onCloseCB)
32-
val data = LibUV.uv_handle_get_data(handle)
36+
val data = getData[Object](handle)
3337
val current = references(data)
3438
if (current > 1) references(data) -= 1
3539
else references.remove(data)

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.3.10
1+
sbt.version=1.3.13

0 commit comments

Comments
 (0)