Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

calling set() while streaming crashes #48

Closed
mimming opened this issue Jan 28, 2016 · 14 comments
Closed

calling set() while streaming crashes #48

mimming opened this issue Jan 28, 2016 · 14 comments
Milestone

Comments

@mimming
Copy link

mimming commented Jan 28, 2016

Summary

If you call stream() and then attempt to call set() from from another client, the device panics :(

Steps

Run this code

#include <Firebase.h>


Firebase fbase = Firebase("espbutton.firebaseio.com").auth("REDACTED");
Firebase fbaseStream = Firebase("espbutton.firebaseio.com").auth("SAME_VALUE_ALSO_REDACTED");


void setup() {

  Serial.begin(9600);

  Serial.println("Hello world!");  

  // connect to wifi.
  WiFi.begin("OpenWifiNetworkSSID");
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());

  fbaseStream.stream("/hello");
}

void loop() {
  fbase.set("/", "{\"hello\": \"world\"}");
}

Result

Hello world!
connecting..
connected: 192.168.123.45

Panic /arduino-sketchbook/hardware/esp8266com/esp8266/libraries/ESP8266WiFi/src/WiFiClientSecure.cpp:495 ax_port_malloc

ctx: cont 
sp: 3fff10a0 end: 3fff1520 offset: 01b0

>>>stack>>>
3fff1250:  3fff28f0 00004000 3fff80b5 40203b80  
3fff1260:  36363636 3fff2f58 3fff2f64 40203b0d  
3fff1270:  3fff80b5 00000000 3fff28f0 402294fc  
3fff1280:  3fff80b5 00000000 3fff28f0 4022a8fe  
3fff1290:  00000001 00000001 3fff80a8 40228a9a  
3fff12a0:  e8dc11b0 a2dee883 b0599e2f 000000b9  
3fff12b0:  00000010 3fff80b5 3fff299c 3fff12f0  
3fff12c0:  3fff80b5 3fff28c0 000000e2 00000010  
3fff12d0:  3fff28f0 3fff80b5 00000010 00000010  
3fff12e0:  3fff80b5 00000000 3fff28f0 4022a31e  
3fff12f0:  8ef9144a 72ca9803 93bab03d 66081d08  
3fff1300:  d258f652 00000000 00000034 40229a40  
3fff1310:  00020016 00000014 00000010 00000010  
3fff1320:  0000002f 00000016 3ffe9388 00000004  
3fff1330:  0000002f 3fff28f0 3fff28f0 4022a456  
3fff1340:  0000002f 3fff80a5 3fff28f0 4022a645  
3fff1350:  3fff283c 4021cafa 3fff27c0 00000000  
3fff1360:  00000000 3fff2158 3fff28f0 4022a6d0  
3fff1370:  3fff1d28 3fff1d28 00000001 3fff0394  
3fff1380:  3fff0398 3fff1d28 3fff1c20 40203906  
3fff1390:  b86ac568 3fff1c88 40205524 3fff1c88  
3fff13a0:  00000001 000001bb 3fff1d28 40203bd2  
3fff13b0:  3ffe9190 b86ac568 3fff01f8 402066b0  
3fff13c0:  3fff2430 000001bb 3fff1d28 40202dc5  
3fff13d0:  3ffe9190 b86ac568 3ffe9190 b86ac568  
3fff13e0:  3fff2288 00000000 3ffe8fe2 40205328  
3fff13f0:  3fff0294 00000000 3fff0294 40203be8  
3fff1400:  00000034 00000001 3fff0294 40204398  
3fff1410:  3ffe8ce3 00000012 3fff0294 40204918  
3fff1420:  3ffe8fe2 4010743f 3fff1450 3fff04f4  
3fff1430:  3fff14e8 3fff0294 3fff0294 40203f94  
3fff1440:  3ffe8ce3 00000000 3fff1494 40202660  
3fff1450:  00000000 00000000 00000000 0000008c  
3fff1460:  3ffe8ce3 3fff14dc 3fff0294 40202843  
3fff1470:  00000133 3ffe8ccb 3fff01f8 4020670a  
3fff1480:  3ffe8c89 00000012 3fff14dc 40206762  
3fff1490:  00000000 3fff22c0 0000003f 00000034  
3fff14a0:  3fffdad0 00000000 3fff14dc 3fff04f4  
3fff14b0:  3fffdad0 3fff0294 3fff14d0 40202903  
3fff14c0:  3fff1600 00000000 3fff04ed 4020250d  
3fff14d0:  3ffe8c82 00f0ffff fe9fa8c0 3fff1c88  
3fff14e0:  0000001f 00000012 3fff1608 0000000f  
3fff14f0:  00000001 00000000 00000000 feefeffe  
3fff1500:  feefeffe 00000000 3fff04ed 40205570  
3fff1510:  feefeffe feefeffe 3fff0500 40100114  
<<<stack<<<
��!����!��
@proppy
Copy link
Collaborator

proppy commented Jan 29, 2016

Might have a similar crash in #42, will try to repo.

@proppy proppy mentioned this issue Apr 2, 2016
4 tasks
@proppy
Copy link
Collaborator

proppy commented Apr 3, 2016

Note this doesn't crash anymore when using https://github.com/esp8266/Arduino master (esp8266/Arduino@5dd6acc).

@BrewCoder
Copy link

Is it allowed to stream and push at the same time? (even if using two instances of the firebase client) One of the comments in #41 indicates a push is not intended to work during a stream....

I'm looking for a way to stream configuration data/status from one firebase type while pushing / storing sensor data to a different type. I'm able to run each process independently without issues but the system crashes when pushing data with a stream active.

@proppy
Copy link
Collaborator

proppy commented Apr 5, 2016

@BrewCoder does it also crash with https://github.com/esp8266/Arduino master?

@BrewCoder
Copy link

@proppy I'm still having the same issue:

Exception (29):
epc1=0x4000e1cc epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000204 depc=0x00000000

ctx: cont
sp: 3fff10c0 end: 3fff1920 offset: 01a0

stack>>>
3fff1260: 00410000 3fff6cec 00000110 4022d5a3
3fff1270: 3fff6db4 3fff701c 00000081 4022e205
3fff1280: 00000210 00000b19 00000b19 4010020c
3fff1290: 3fff738c 3fff7254 00000040 00000000
3fff12a0: 00000014 3fff6cec 00000041 00000041
3fff12b0: 00000000 00000001 00000001 0000007f
3fff12c0: 3fff701c 00000081 3fff701c 402047d4
3fff12d0: 3fff6db4 3fff6cec 3fff6d44 0000007f
3fff12e0: 3fff701c 3fff6cec 3fff6cec 4022e4c1
........

Pseudocode:
Firebase fbaseStream = Firebase("**********.firebaseio.com").auth("Token");
Firebase fbasePush = Firebase("**
********.firebaseio.com").auth("Token");
FirebaseStream stream;

setup(){
stream = fbaseStream.stream("/controls");
}

loop(){
if (stream.error()) {
Serial.println("streaming error");
Serial.println(stream.error().message());
}
if(stream.available()) {
String event;
auto type = stream.read(event);
Serial.print("event: ");
Serial.println(type);
if (type == FirebaseStream::Event::PUT) {
Serial.print("data: ");
Serial.println(event);
}
}

*****every 30 seconds
FirebasePush push = fbasePush.push("/logs", buffer);
if (push.error()) {
Serial.println("Firebase push failed");
Serial.println(push.error().message());
return;
}
}

@proppy
Copy link
Collaborator

proppy commented May 19, 2016

I think this is fixed with arduino-esp8266 master (esp8266/Arduino@43fb139).

I was able to run successfully the following sketch:


FirebaseArduino FirebaseStream;

void setup() {
  Serial.begin(9600);

  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);  
  FirebaseStream.begin(FIREBASE_HOST, FIREBASE_AUTH);
  FirebaseStream.stream("/data");
}

int n = 0;
void loop() {
  Serial.println("loop");
  Firebase.setInt("data", n++);
  if (Firebase.failed()) {
    Serial.println(Firebase.error());
  }
  int data = Firebase.getInt("data");
  if (Firebase.failed()) {
    Serial.println(Firebase.error());
  }
  Serial.print("data: ");
  Serial.println(data);
  Serial.print("heap: ");
  if (FirebaseStream.available()) {
    FirebaseObject event = FirebaseStream.readEvent();
    Serial.print("event: ");
    Serial.println(event.getString("event"));
    Serial.print("path: ");
    Serial.println(event.getString("path"));
    Serial.print("data: ");
    Serial.println(event.getInt("data"));
  }
  Serial.println(ESP.getFreeHeap());
  delay(1000);
}

@proppy
Copy link
Collaborator

proppy commented May 19, 2016

@BrewCoder can you try again?

@mininao
Copy link

mininao commented Jun 3, 2016

I think I have the same issue, with esp8266/arduino pulled straight from master.
Here is the simplest repro I could make : https://gist.github.com/mininao/a3f29eebb39c18c8104ae28e2a74b747
It crashes a few seconds after turning in on, leaving the output that's in the gist

@tabvn
Copy link

tabvn commented Jul 1, 2016

I confirm that problem still exit , we could not push during stream #185

@ed7coyne
Copy link
Collaborator

I dug into this a bit last week. The problem is having two SSL connections at the same time. I believe the issue is due to a lack of ram.

Here is a simplified .ino based on the esp's streaming example, that will also crash: https://gist.github.com/ed7coyne/678398bb0d9fa1f826d581650606267a

Here is an issue on the esp core that I beleive to be the root cause: esp8266/Arduino#2201

@Scott--R
Copy link

Is anyone working on a solution to this? I can't even get a simple example to stream without crashing. The moment the line FirebaseObject event = Firebase.readEvent(); is executed it crashes every time. I've tried just about every example I could find and every sketch crashes at this line.

@rogerin
Copy link

rogerin commented May 6, 2017

use more energy?

@shabnamkousha
Copy link

Does anyone have any solution for this issue?

proppy added a commit to proppy/firebase-arduino that referenced this issue Nov 2, 2017
With this change non-streaming operation will stop the stream and
reuse the underlying http client.

Call FirebaseArduino::stream again in order to reuse the stream.

Fixes: FirebaseExtended#48
@kotl kotl closed this as completed in #294 Nov 11, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants